package org.eparapher.rcp.dialog; import java.awt.Dimension; import java.awt.Frame; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.HashMap; import java.util.Iterator; import javax.swing.DefaultListModel; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.ListSelectionModel; public class SelectCertificateDialog extends JDialog { private static final long serialVersionUID = 13453L; private static final int DIALOG_HEIGHT = 200; private static final int DIALOG_WIDTH = 350; private String selectedAlias; private JPanel MainPanel; //GUI Objects private JList certList; private JScrollPane listScrollPane; private JLabel txtLabel; private JButton butOK; private JButton butCancel; public boolean recieved; public SelectCertificateDialog( HashMap hmcertList, Frame owner, String title) { super(owner, title, true); recieved = false; selectedAlias = null; //GUI Elements MainPanel = new JPanel(); txtLabel = new JLabel(); butOK = new JButton(); butCancel = new JButton(); //GUI Settings setLayout(null); setSize( DIALOG_WIDTH, DIALOG_HEIGHT ); setVisible(false); constructListContent(hmcertList); MainPanel.add(listScrollPane); listScrollPane.setBounds(1, 25, DIALOG_WIDTH -9, DIALOG_HEIGHT-100); txtLabel.setText("Selectionnez votre certificat d'authentification :"); MainPanel.add(txtLabel); txtLabel.setBounds(1, 1, DIALOG_WIDTH -9, 22); butOK.setText("OK"); MainPanel.add(butOK); butOK.setBounds((DIALOG_WIDTH/3)-35, DIALOG_HEIGHT-57, 70, 22); butCancel.setText("Cancel"); MainPanel.add(butCancel); butCancel.setBounds((DIALOG_WIDTH*2/3)-35, DIALOG_HEIGHT-57, 70, 22); SelectCertificateDialogActionListener actionlistener = new SelectCertificateDialogActionListener(); butOK.addActionListener(actionlistener); butCancel.addActionListener(actionlistener); MainPanel.setLayout(null); MainPanel.setBounds(0, 0, DIALOG_WIDTH, DIALOG_HEIGHT ); add(MainPanel); MainPanel.setVisible(true); // Gestion du bouton fermer la fenetre SelectDialogWindowAdapter windowadapter = new SelectDialogWindowAdapter(); addWindowListener(windowadapter); setResizable(false); Dimension dimension = getToolkit().getScreenSize(); Rectangle rectangle = getBounds(); setLocation((dimension.width - rectangle.width) / 2, (dimension.height - rectangle.height) / 2); } private void constructListContent(HashMap hmcertList) { //Build the certificate list DefaultListModel listModel = new DefaultListModel(); Iterator aliasesIter = hmcertList.keySet().iterator(); while (aliasesIter.hasNext()) { String alias = (String) aliasesIter.next(); listModel.addElement(alias); } //finalise the gui component certList = new JList(listModel); certList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); certList.setLayoutOrientation(JList.VERTICAL); certList.setSelectedIndex(0); certList.setVisibleRowCount(5); certList.setVisible(true); listScrollPane = new JScrollPane(certList,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); listScrollPane.setVisible(true); } public String getSelectedAlias() { return selectedAlias; } public boolean isRecieved() { return recieved; } //GUI Events class SelectCertificateDialogActionListener implements ActionListener { public void actionPerformed(ActionEvent actionevent) { Object obj = actionevent.getSource(); if(obj == butOK) { if (!certList.isSelectionEmpty()) selectedAlias = (String) certList.getSelectedValue(); else { certList.setSelectedIndex(0); selectedAlias = (String) certList.getSelectedValue(); } } if(obj == butCancel) { certList.setSelectedIndex(0); selectedAlias = (String) certList.getSelectedValue(); } setVisible(false); recieved = true; } } //GUI Events class SelectDialogWindowAdapter extends WindowAdapter { public void windowClosing(WindowEvent windowevent) { certList.setSelectedIndex(0); selectedAlias = (String) certList.getSelectedValue(); recieved = true; setVisible(false); dispose(); } } }