4 * Copyright(c) 2008 olyutorskii
\r
5 * $Id: TopView.java 888 2009-11-04 06:23:35Z olyutorskii $
\r
8 package jp.sourceforge.jindolf;
\r
10 import java.awt.BorderLayout;
\r
11 import java.awt.CardLayout;
\r
12 import java.awt.GridBagConstraints;
\r
13 import java.awt.GridBagLayout;
\r
14 import java.awt.Insets;
\r
15 import javax.swing.BorderFactory;
\r
16 import javax.swing.JComponent;
\r
17 import javax.swing.JLabel;
\r
18 import javax.swing.JPanel;
\r
19 import javax.swing.JProgressBar;
\r
20 import javax.swing.JScrollPane;
\r
21 import javax.swing.JSplitPane;
\r
22 import javax.swing.JTextField;
\r
23 import javax.swing.JToolBar;
\r
24 import javax.swing.JTree;
\r
25 import javax.swing.SwingConstants;
\r
26 import javax.swing.border.BevelBorder;
\r
27 import javax.swing.border.Border;
\r
28 import javax.swing.border.CompoundBorder;
\r
32 * メインアプリウィンドウのコンポーネントの親コンテナ。
\r
34 @SuppressWarnings("serial")
\r
35 public class TopView extends JPanel{
\r
37 private static final String INITCARD = "INITCARD";
\r
38 private static final String LANDCARD = "LANDINFO";
\r
39 private static final String BROWSECARD = "BROWSER";
\r
41 private final JComponent cards;
\r
42 private final CardLayout cardLayout = new CardLayout();
\r
44 private final LandsTree landsTreeView = new LandsTree();
\r
46 private final LandInfoPanel landInfo = new LandInfoPanel();
\r
48 private final JTextField sysMessage = new JTextField();
\r
49 private final JProgressBar progressBar = new JProgressBar();
\r
51 private final TabBrowser tabBrowser = new TabBrowser();
\r
53 private JComponent browsePanel;
\r
61 this.cards = createCards();
\r
62 JComponent split = createSplitPane(this.landsTreeView, this.cards);
\r
63 JComponent statusBar = createStatusBar();
\r
65 BorderLayout layout = new BorderLayout();
\r
67 add(split, BorderLayout.CENTER);
\r
68 add(statusBar, BorderLayout.SOUTH);
\r
77 private JComponent createCards(){
\r
78 this.browsePanel = createBrowsePanel();
\r
80 JPanel panel = new JPanel();
\r
81 panel.setLayout(this.cardLayout);
\r
82 panel.add(INITCARD, createInitCard());
\r
83 panel.add(LANDCARD, createLandInfoCard());
\r
84 panel.add(BROWSECARD, this.browsePanel);
\r
93 private JComponent createInitCard(){
\r
94 JLabel initMessage = new JLabel("← 村を選択してください");
\r
96 StringBuilder acct = new StringBuilder();
\r
97 acct.append("※ 参加中の村がある人は<br></br>");
\r
98 acct.append("メニューの「アカウント管理」から<br></br>");
\r
99 acct.append("ログインしてください");
\r
100 acct.insert(0, "<center>").append("</center>");
\r
101 acct.insert(0, "<body>") .append("</body>");
\r
102 acct.insert(0, "<html>") .append("</html>");
\r
103 JLabel acctMessage = new JLabel(acct.toString());
\r
105 StringBuilder warn = new StringBuilder();
\r
106 warn.append("※ たまにはWebブラウザでアクセスして、");
\r
107 warn.append("<br></br>");
\r
108 warn.append("運営の動向を確かめようね!");
\r
109 warn.insert(0, "<center>").append("</center>");
\r
110 warn.insert(0, "<body>") .append("</body>");
\r
111 warn.insert(0, "<html>") .append("</html>");
\r
112 JLabel warnMessage = new JLabel(warn.toString());
\r
114 JPanel panel = new JPanel();
\r
115 GridBagLayout layout = new GridBagLayout();
\r
116 GridBagConstraints constraints = new GridBagConstraints();
\r
117 panel.setLayout(layout);
\r
119 constraints.weightx = 1.0;
\r
120 constraints.weighty = 1.0;
\r
121 constraints.anchor = GridBagConstraints.CENTER;
\r
122 constraints.gridx = GridBagConstraints.REMAINDER;
\r
123 panel.add(initMessage, constraints);
\r
124 panel.add(acctMessage, constraints);
\r
125 panel.add(warnMessage, constraints);
\r
127 JScrollPane scrollPane = new JScrollPane(panel);
\r
136 private JComponent createLandInfoCard(){
\r
137 this.landInfo.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
\r
138 JScrollPane scrollPane = new JScrollPane(this.landInfo);
\r
146 private JComponent createBrowsePanel(){
\r
147 JPanel panel = new JPanel();
\r
148 BorderLayout layout = new BorderLayout();
\r
149 panel.setLayout(layout);
\r
151 panel.add(this.tabBrowser, BorderLayout.CENTER);
\r
157 * ブラウザ用ツールバーをセットする。
\r
158 * @param toolbar ツールバー
\r
160 public void setBrowseToolBar(JToolBar toolbar){
\r
161 this.browsePanel.add(toolbar, BorderLayout.NORTH);
\r
167 * @param left 左コンポーネント
\r
168 * @param right 右コンポーネント
\r
169 * @return SplitPane
\r
171 private JComponent createSplitPane(JComponent left, JComponent right){
\r
172 JSplitPane split = new JSplitPane();
\r
173 split.setLeftComponent(left);
\r
174 split.setRightComponent(right);
\r
175 split.setOrientation(JSplitPane.HORIZONTAL_SPLIT);
\r
176 split.setContinuousLayout(false);
\r
177 split.setOneTouchExpandable(true);
\r
178 split.setDividerLocation(200);
\r
187 private JComponent createStatusBar(){
\r
188 this.sysMessage.setText(
\r
189 Jindolf.TITLE + " " + Jindolf.VERSION
\r
190 + " を使ってくれてありがとう!" );
\r
191 this.sysMessage.setEditable(false);
\r
192 Border inside = BorderFactory.createBevelBorder(BevelBorder.LOWERED);
\r
193 Border outside = BorderFactory.createEmptyBorder(2, 5, 2, 2);
\r
194 Border border = new CompoundBorder(inside, outside);
\r
195 this.sysMessage.setBorder(border);
\r
197 this.progressBar.setIndeterminate(false);
\r
198 this.progressBar.setOrientation(SwingConstants.HORIZONTAL);
\r
199 this.progressBar.setMinimum(0);
\r
200 this.progressBar.setMaximum(99);
\r
201 this.progressBar.setValue(0);
\r
203 JPanel statusBar = new JPanel();
\r
204 GridBagLayout layout = new GridBagLayout();
\r
205 GridBagConstraints constraints = new GridBagConstraints();
\r
206 statusBar.setLayout(layout);
\r
208 constraints.weightx = 1.0;
\r
209 constraints.fill = GridBagConstraints.HORIZONTAL;
\r
210 statusBar.add(this.sysMessage, constraints);
\r
212 constraints.weightx = 0.0;
\r
213 constraints.fill = GridBagConstraints.NONE;
\r
214 constraints.insets = new Insets(2, 2, 2, 2);
\r
215 statusBar.add(this.progressBar, constraints);
\r
222 * @return 国村選択ツリービュー
\r
224 public JTree getTreeView(){
\r
225 return this.landsTreeView.getTreeView();
\r
232 public TabBrowser getTabBrowser(){
\r
233 return this.tabBrowser;
\r
240 public LandsTree getLandsTree(){
\r
241 return this.landsTreeView;
\r
245 * プログレスバーとカーソルの設定を行う。
\r
246 * @param busy trueならプログレスバーのアニメ開始&WAITカーソル。
\r
247 * falseなら停止&通常カーソル。
\r
249 public void setBusy(boolean busy){
\r
250 this.progressBar.setIndeterminate(busy);
\r
256 * @param message 更新文字列
\r
258 public void updateSysMessage(String message){
\r
259 if(message == null) return;
\r
261 if(message.length() <= 0) text = " ";
\r
262 else text = message;
\r
263 this.sysMessage.setText(text); // Thread safe
\r
264 GUIUtils.dispatchEmptyAWTEvent();
\r
271 public void showInitPanel(){
\r
272 this.cardLayout.show(this.cards, INITCARD);
\r
280 public void showVillageInfo(Village village){
\r
281 this.tabBrowser.setVillage(village);
\r
282 this.cardLayout.show(this.cards, BROWSECARD);
\r
283 this.tabBrowser.repaint();
\r
284 this.tabBrowser.revalidate();
\r
293 public void showLandInfo(Land land){
\r
294 this.landInfo.update(land);
\r
295 this.cardLayout.show(this.cards, LANDCARD);
\r
299 // TODO setEnabled()を全子フレームにも波及させるべきか
\r