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());
47 public void actionPerformed(ActionEvent e){
48 JComponent c = createPanel();
49 JOptionPane.showMessageDialog(
50 parent, c, parent.getMessages().get("updatecellcolor.dialog.title"),
51 JOptionPane.INFORMATION_MESSAGE
55 private JComponent createPanel(){
56 Box panel = Box.createVerticalBox();
57 for(int i = 0; i <= 5; i++){
58 Color fore = CompareTableCellRenderer.getForegroundColor(i, environment);
59 Color back = CompareTableCellRenderer.getBackgroundColor(i, environment);
61 UpdateColorPane pane = new UpdateColorPane(i, fore, back);
68 private Color updateColor(Color c, int rank, boolean foreground){
70 chooser = new JColorChooser();
73 String l = parent.getMessages().get((foreground? "forecolor_": "backcolor_") + rank + ".label");
74 int returnValue = JOptionPane.showConfirmDialog(
75 parent, chooser, parent.getMessages().get("updatecell.title", l),
76 JOptionPane.INFORMATION_MESSAGE
78 if(returnValue == JOptionPane.OK_OPTION){
79 c = chooser.getColor();
85 private class UpdateColorPane extends JPanel{
86 private static final long serialVersionUID = 8271684478406307685L;
91 public UpdateColorPane(int rank, Color fore, Color back){
95 label.setForeground(fore);
96 label.setBackground(back);
103 private void initLayouts(){
104 label = new JLabel(parent.getMessages().get("rank_" + rank + ".label"));
105 label.setOpaque(true);
106 JButton fore = GUIUtility.createButton(parent.getMessages(), "updatecellfore");
107 JButton back = GUIUtility.createButton(parent.getMessages(), "updatecellback");
109 ActionListener listener = new ActionListener(){
110 public void actionPerformed(ActionEvent e){
111 String command = e.getActionCommand();
112 boolean foreground = command.equals("updatecellfore");
114 Color c = label.getBackground();
116 c = label.getForeground();
118 c = updateColor(c, getRank(), foreground);
120 label.setForeground(c);
121 environment.addProperty(
122 "forecolor_" + getRank(), String.format("%06x", c.getRGB() & 0xffffff)
126 label.setBackground(c);
127 environment.addProperty(
128 "backcolor_" + getRank(), String.format("%06x", c.getRGB() & 0xffffff)
133 fore.addActionListener(listener);
134 back.addActionListener(listener);
136 setLayout(new GridLayout(1, 3));