1 package jp.sourceforge.stigmata.ui.swing.actions;
4 import java.awt.GridLayout;
5 import java.awt.event.ActionEvent;
6 import java.awt.event.ActionListener;
8 import javax.swing.AbstractAction;
9 import javax.swing.Box;
10 import javax.swing.JButton;
11 import javax.swing.JColorChooser;
12 import javax.swing.JComponent;
13 import javax.swing.JLabel;
14 import javax.swing.JOptionPane;
15 import javax.swing.JPanel;
17 import jp.sourceforge.stigmata.BirthmarkEnvironment;
18 import jp.sourceforge.stigmata.ui.swing.CompareTableCellRenderer;
19 import jp.sourceforge.stigmata.ui.swing.GUIUtility;
20 import jp.sourceforge.stigmata.ui.swing.StigmataFrame;
24 * @author Haruaki Tamada
26 public class UpdateBirthmarkCellColorAction extends AbstractAction{
27 private static final long serialVersionUID = 2390797591047570440L;
29 private StigmataFrame parent;
30 private BirthmarkEnvironment environment;
31 private JColorChooser chooser;
33 public UpdateBirthmarkCellColorAction(StigmataFrame parent, BirthmarkEnvironment environment){
35 this.environment = environment;
38 public UpdateBirthmarkCellColorAction(StigmataFrame parent){
39 this(parent, BirthmarkEnvironment.getDefaultEnvironment());
43 public void actionPerformed(ActionEvent e){
44 JComponent c = createPanel();
45 JOptionPane.showMessageDialog(
46 parent, c, parent.getMessages().get("updatecellcolor.dialog.title"),
47 JOptionPane.INFORMATION_MESSAGE
51 private JComponent createPanel(){
52 Box panel = Box.createVerticalBox();
53 for(int i = 0; i <= 5; i++){
54 Color fore = CompareTableCellRenderer.getForegroundColor(i, environment);
55 Color back = CompareTableCellRenderer.getBackgroundColor(i, environment);
57 UpdateColorPane pane = new UpdateColorPane(i, fore, back);
64 private Color updateColor(Color c, int rank, boolean foreground){
66 chooser = new JColorChooser();
69 String l = parent.getMessages().get((foreground? "forecolor_": "backcolor_") + rank + ".label");
70 int returnValue = JOptionPane.showConfirmDialog(
71 parent, chooser, parent.getMessages().get("updatecell.title", l),
72 JOptionPane.INFORMATION_MESSAGE
74 if(returnValue == JOptionPane.OK_OPTION){
75 c = chooser.getColor();
81 private class UpdateColorPane extends JPanel{
82 private static final long serialVersionUID = 8271684478406307685L;
87 public UpdateColorPane(int rank, Color fore, Color back){
91 label.setForeground(fore);
92 label.setBackground(back);
99 private void initLayouts(){
100 label = new JLabel(parent.getMessages().get("rank_" + rank + ".label"));
101 label.setOpaque(true);
102 JButton fore = GUIUtility.createButton(parent.getMessages(), "updatecellfore");
103 JButton back = GUIUtility.createButton(parent.getMessages(), "updatecellback");
105 ActionListener listener = new ActionListener(){
107 public void actionPerformed(ActionEvent e){
108 String command = e.getActionCommand();
109 boolean foreground = command.equals("updatecellfore");
111 Color c = label.getBackground();
113 c = label.getForeground();
115 c = updateColor(c, getRank(), foreground);
117 label.setForeground(c);
118 environment.addProperty(
119 "forecolor_" + getRank(), String.format("%06x", c.getRGB() & 0xffffff)
123 label.setBackground(c);
124 environment.addProperty(
125 "backcolor_" + getRank(), String.format("%06x", c.getRGB() & 0xffffff)
130 fore.addActionListener(listener);
131 back.addActionListener(listener);
133 setLayout(new GridLayout(1, 3));