1 package jp.sourceforge.stigmata.ui.swing.actions;
8 import java.awt.GridLayout;
9 import java.awt.event.ActionEvent;
10 import java.awt.event.ActionListener;
12 import javax.swing.AbstractAction;
13 import javax.swing.Box;
14 import javax.swing.JButton;
15 import javax.swing.JColorChooser;
16 import javax.swing.JComponent;
17 import javax.swing.JLabel;
18 import javax.swing.JOptionPane;
19 import javax.swing.JPanel;
21 import jp.sourceforge.stigmata.BirthmarkEnvironment;
22 import jp.sourceforge.stigmata.ui.swing.CompareTableCellRenderer;
23 import jp.sourceforge.stigmata.ui.swing.GUIUtility;
24 import jp.sourceforge.stigmata.ui.swing.StigmataFrame;
28 * @author Haruaki Tamada
31 public class UpdateBirthmarkCellColorAction extends AbstractAction{
32 private static final long serialVersionUID = 2390797591047570440L;
34 private StigmataFrame parent;
35 private BirthmarkEnvironment environment;
36 private JColorChooser chooser;
38 public UpdateBirthmarkCellColorAction(StigmataFrame parent, BirthmarkEnvironment environment){
40 this.environment = environment;
43 public UpdateBirthmarkCellColorAction(StigmataFrame parent){
44 this(parent, BirthmarkEnvironment.getDefaultEnvironment());
48 public void actionPerformed(ActionEvent e){
49 JComponent c = createPanel();
50 JOptionPane.showMessageDialog(
51 parent, c, parent.getMessages().get("updatecellcolor.dialog.title"),
52 JOptionPane.INFORMATION_MESSAGE
56 private JComponent createPanel(){
57 Box panel = Box.createVerticalBox();
58 for(int i = 0; i <= 5; i++){
59 Color fore = CompareTableCellRenderer.getForegroundColor(i, environment);
60 Color back = CompareTableCellRenderer.getBackgroundColor(i, environment);
62 UpdateColorPane pane = new UpdateColorPane(i, fore, back);
69 private Color updateColor(Color c, int rank, boolean foreground){
71 chooser = new JColorChooser();
74 String l = parent.getMessages().get((foreground? "forecolor_": "backcolor_") + rank + ".label");
75 int returnValue = JOptionPane.showConfirmDialog(
76 parent, chooser, parent.getMessages().get("updatecell.title", l),
77 JOptionPane.INFORMATION_MESSAGE
79 if(returnValue == JOptionPane.OK_OPTION){
80 c = chooser.getColor();
86 private class UpdateColorPane extends JPanel{
87 private static final long serialVersionUID = 8271684478406307685L;
92 public UpdateColorPane(int rank, Color fore, Color back){
96 label.setForeground(fore);
97 label.setBackground(back);
100 public int getRank(){
104 private void initLayouts(){
105 label = new JLabel(parent.getMessages().get("rank_" + rank + ".label"));
106 label.setOpaque(true);
107 JButton fore = GUIUtility.createButton(parent.getMessages(), "updatecellfore");
108 JButton back = GUIUtility.createButton(parent.getMessages(), "updatecellback");
110 ActionListener listener = new ActionListener(){
112 public void actionPerformed(ActionEvent e){
113 String command = e.getActionCommand();
114 boolean foreground = command.equals("updatecellfore");
116 Color c = label.getBackground();
118 c = label.getForeground();
120 c = updateColor(c, getRank(), foreground);
122 label.setForeground(c);
123 environment.addProperty(
124 "forecolor_" + getRank(), String.format("%06x", c.getRGB() & 0xffffff)
128 label.setBackground(c);
129 environment.addProperty(
130 "backcolor_" + getRank(), String.format("%06x", c.getRGB() & 0xffffff)
135 fore.addActionListener(listener);
136 back.addActionListener(listener);
138 setLayout(new GridLayout(1, 3));