設(shè)計(jì)一個(gè)獨(dú)立的監(jiān)聽(tīng)器類(lèi)ToolBarListener ,實(shí)現(xiàn)接口ActionListener ,重寫(xiě)actionPerformed方法。
getSource()方法是指從哪個(gè)組件發(fā)出的事件源。
通過(guò)ActionEvent.getSource()獲取事件是哪個(gè)按鈕發(fā)出來(lái)的掉分,根據(jù)不同的按鈕鸥诽,發(fā)出切換不同的功能面板炭臭。
1.創(chuàng)建監(jiān)聽(tīng)器把所有按鈕的監(jiān)聽(tīng)器都整合到一起方便維護(hù):
public class ToolBarListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
MainPanel p = MainPanel.instance;
JButton b = (JButton) e.getSource();
if (b == p.bReport)
p.workingPanel.show(ReportPanel.instance);
if (b == p.bCategory)
p.workingPanel.show(CategoryPanel.instance);
if (b == p.bSpend)
p.workingPanel.show(SpendPanel.instance);
if (b == p.bRecord)
p.workingPanel.show(RecordPanel.instance);
if (b == p.bConfig)
p.workingPanel.show(ConfigPanel.instance);
if (b == p.bBackup)
p.workingPanel.show(BackupPanel.instance);
if (b == p.bRecover)
p.workingPanel.show(RecoverPanel.instance);
}
}
2.實(shí)例化一個(gè)ToolBarListener 監(jiān)聽(tīng)器迎膜,工具欄上的按鈕,都加上這么一個(gè)監(jiān)聽(tīng)器對(duì)象即可责静。(從 addListener()開(kāi)始)
package gui.panel;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JToolBar;
import gui.listener.ToolBarListener;
import util.CenterPanel;
import util.GUIUtil;
public class MainPanel extends JPanel {
static {
GUIUtil.useLNF();
}
public static MainPanel instance = new MainPanel();
public JToolBar tb = new JToolBar();
public JButton bSpend = new JButton();
public JButton bRecord = new JButton();
public JButton bCategory = new JButton();
public JButton bReport = new JButton();
public JButton bConfig = new JButton();
public JButton bBackup = new JButton();
public JButton bRecover = new JButton();
public CenterPanel workingPanel;
private MainPanel() {
GUIUtil.setImageIcon(bSpend, "home.png", "消費(fèi)一覽");
GUIUtil.setImageIcon(bRecord, "record.png", "記一筆");
GUIUtil.setImageIcon(bCategory, "category2.png", "消費(fèi)分類(lèi)");
GUIUtil.setImageIcon(bReport, "report.png", "月消費(fèi)報(bào)表");
GUIUtil.setImageIcon(bConfig, "config.png", "設(shè)置");
GUIUtil.setImageIcon(bBackup, "backup.png", "備份");
GUIUtil.setImageIcon(bRecover, "restore.png", "恢復(fù)");
tb.add(bSpend);
tb.add(bRecord);
tb.add(bCategory);
tb.add(bReport);
tb.add(bConfig);
tb.add(bBackup);
tb.add(bRecover);
tb.setFloatable(false);
workingPanel = new CenterPanel(0.8);
setLayout(new BorderLayout());
add(tb, BorderLayout.NORTH);
add(workingPanel, BorderLayout.CENTER);
addListener();
}
private void addListener() {
ToolBarListener listener = new ToolBarListener();
bSpend.addActionListener(listener);
bRecord.addActionListener(listener);
bCategory.addActionListener(listener);
bReport.addActionListener(listener);
bConfig.addActionListener(listener);
bBackup.addActionListener(listener);
bRecover.addActionListener(listener);
}
public static void main(String[] args) {
GUIUtil.showPanel(MainPanel.instance, 1);
}
}