package org.irmacard.cardmanagement; import java.awt.Color; import java.awt.FlowLayout; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.border.BevelBorder; import org.irmacard.credentials.info.CredentialDescription; import org.irmacard.credentials.info.InfoException; public class CredentialList extends JPanel { private static final long serialVersionUID = -1213410785197808016L; CredentialButton selected = null; /** * Create the panel. */ public CredentialList() { setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null)); //setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); setLayout(new FlowLayout()); // FIXME: fill the list with buttons // CredentialDescription credential = null; // try { // credential = new CredentialDescription((short) 0); // } catch (InfoException e) { // e.printStackTrace(); // } // CredentialButton btnCredential = new CredentialButton(credential, this); // add(btnCredential); // try { // credential = new CredentialDescription((short) 1); // } catch (InfoException e) { // e.printStackTrace(); // } // CredentialButton btnCredential2 = new CredentialButton(credential, this); // add(btnCredential2); } public void setSelected(CredentialButton button) { if(selected != null) { selected.setSelected(false); } selected = button; } public CredentialDescription getCredential() { if(selected != null) { return selected.getCredential(); } else { return null; } } private class CredentialButton extends JButton implements MouseListener { private static final long serialVersionUID = -2426794449213059099L; private CredentialDescription credential; private CredentialList parent; private Color selectedColor = new Color(0, 66, 137); public CredentialButton(CredentialDescription credential, CredentialList parent) { //super(credential.getName()); this.credential = credential; this.parent = parent; this.setBorderPainted(false); this.setOpaque(false); this.setBackground(new Color(0, true)); this.addMouseListener(this); setText(credential.getName()); } @Override public void paint(Graphics g) { if(isSelected()) { g.setColor(selectedColor); } else { g.setColor(getBackground()); } g.fillRect(0, 0, getWidth(), getHeight()); g.setColor(Color.WHITE); g.fillRoundRect(15, 15, getWidth() - 20, getHeight() - 20, 2, 2); g.setColor(getForeground()); g.drawChars(getText().toCharArray(), 0, getText().length(), 20, 20); } @Override public void setText(String text) { super.setText(text); FontMetrics fontMetrics = getFontMetrics(getFont()); int width = fontMetrics.stringWidth(getText()) + 25; int height = fontMetrics.getHeight() + 40; setSize(width, height); } public CredentialDescription getCredential() { return credential; } @Override public void mouseClicked(MouseEvent e) { parent.setSelected(this); this.setSelected(true); repaint(); } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } } }