OSDN Git Service

fixed: GUIを一新した
[importpicture/importpicture.git] / src / main / java / osm / jp / gpx / matchtime / gui / Card.java
1 package osm.jp.gpx.matchtime.gui;
2
3 import java.awt.BorderLayout;
4 import java.awt.Dimension;
5 import java.awt.event.ActionEvent;
6 import java.util.ArrayList;
7 import javax.swing.Box;
8 import javax.swing.BoxLayout;
9 import javax.swing.JButton;
10 import javax.swing.JComponent;
11 import javax.swing.JPanel;
12 import javax.swing.JTabbedPane;
13 import static osm.jp.gpx.matchtime.gui.AdjustTime.i18n;
14
15 public class Card extends JPanel {
16     JTabbedPane tabbe;
17     public JPanel mainPanel;
18     String title;
19     int backNumber = -1;
20     int nextNumber = -1;
21     public JButton nextButton;     // [次へ]ボタン
22     public JButton backButton;     // [戻る]ボタン
23     
24     public Card(JTabbedPane tabbe, String title, int backNumber, int nextNumber) {
25         super();
26         this.tabbe = tabbe;
27         this.title = title;
28         this.backNumber = backNumber;
29         this.nextNumber = nextNumber;
30
31         // INIT_CONTROLS
32         this.setLayout(new BorderLayout());
33         
34         //---- CENTER -----
35         mainPanel = new JPanel();
36         mainPanel.setLayout(new BorderLayout());
37         this.add(mainPanel, BorderLayout.CENTER);
38         
39         //---- SOUTH -----
40         JPanel buttonPanel = new JPanel(new BorderLayout());
41         buttonPanel.add(Box.createVerticalStrut(10), BorderLayout.SOUTH);
42         buttonPanel.add(Box.createVerticalStrut(10), BorderLayout.NORTH);
43         this.add(buttonPanel, BorderLayout.SOUTH);
44         
45         //{{REGISTER_LISTENERS
46         SymAction lSymAction = new SymAction();
47         if (nextNumber >= 0) {
48             nextButton = new JButton(i18n.getString("button.next"));
49             nextButton.setEnabled(false);
50             buttonPanel.add(nextButton, BorderLayout.EAST);
51             nextButton.addActionListener(lSymAction);
52         }
53
54         if (backNumber >= 0) {
55             backButton = new JButton(i18n.getString("button.previous"));
56             backButton.setEnabled(false);
57             buttonPanel.add(backButton, BorderLayout.WEST);
58             backButton.addActionListener(lSymAction);
59         }
60         //}}
61     }
62     
63     public static JPanel packLine(JComponent[] components, JPanel panel) {
64         panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
65         int max = 0;
66         for (JComponent component : components) {
67             panel.add(component);
68             Dimension size = component.getMaximumSize();
69             if (max < size.height) {
70                 max = size.height;
71             }
72         }
73         Dimension size = new Dimension();
74         size.width = Short.MAX_VALUE;
75         size.height = max;
76         panel.setMaximumSize(size);
77         return panel;
78     }
79
80     public static JPanel packLine(JComponent component, JPanel panel) {
81         ArrayList<JComponent> array = new ArrayList<>();
82         array.add(component);
83         return packLine(array.toArray(new JComponent[array.size()]), panel);
84     }
85
86     @Override
87     public void setEnabled(boolean enabled) {
88         this.tabbe.setEnabledAt(nextNumber - 1, enabled);
89     }
90     
91     public String getTitle() {
92         return this.title;
93     }
94
95     class SymAction implements java.awt.event.ActionListener {
96         @Override
97         public void actionPerformed(java.awt.event.ActionEvent event) {
98             Object object = event.getSource();
99             if (object == nextButton) {
100                 nextButton_Action(event);
101             }
102             else if (object == backButton) {
103                 backButton_Action(event);
104             }
105         }
106     }
107     
108     /**
109      * [次へ]ボタンをクリックした時の動作
110      * @param event 
111      */
112     void nextButton_Action(ActionEvent event) {
113         this.tabbe.setSelectedIndex(this.nextNumber);
114     }
115
116     /**
117      * [戻る]ボタンをクリックした時の動作
118      * @param event
119      */
120     void backButton_Action(ActionEvent event) {
121         this.tabbe.setSelectedIndex(this.backNumber);
122     }
123 }