作者baconcsie (Bacon)
看板java
标题[问题] itemStateChanged 事件处理 无法正常运作
时间Wed Oct 6 00:57:07 2010
我做了一个JCombobox,只要点选 JCombobox 的选项,就会触发 itemStateChanged 的
事件处理,将版面更换成所选取的版面。
但只要程式呼叫执行 itemStateChanged 并做 控制 panel的事情时,就会发生例外处理
停止程式执行,只要把控制panel的程式码移除,一切又正常。
我翻了两本视窗程式设计的书,皆找不到答案,所以跪求板上的神人大
大们,帮我解惑,拜托了!!
以下是我的程式码:(itemStateChanged 在最下面)
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.swing.border.Border;
public class MainFrame implements ActionListener, ItemListener{
JFrame fr;
Container contenpan;
//功能表
JMenuBar mb;
JMenu file;
JMenuItem importt;
JMenuItem exit;
JMenu help;
JMenuItem aboutMI;
JMenuItem test;
//对话方块
//关於的对话方块
JDialog aboutMIDl;
//组合方块
JPanel machinepan;
JLabel machinename;
JComboBox machinecmbbox;
DefaultComboBoxModel cmbModel; //ComboboxModel
//分页用panel
JPanel tabbedpanel;
//分页链结串列
ChiefpanelList chfpl = new ChiefpanelList();
MainFrame(){
fr = new JFrame("流量监测系统");
//呼叫创建功能表的函数
buildMenuBar();
//取得mainframe的contenpan并设定排版为border;
contenpan = fr.getContentPane();
BorderLayout border = new BorderLayout(1,1);
contenpan.setLayout(border);
//呼叫创建监测机器列表的method
buildmachinepan();
//呼叫创建分页的method
//buildTabbedPane();
fr.setVisible(true);
fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fr.pack();
}
//设定功能表的函数
private void buildMenuBar(){
mb = new JMenuBar();
file = new JMenu("档案");
importt = new JMenuItem("汇入");
exit = new JMenuItem("关闭");
mb.add(file);
file.add(importt);
file.add(exit);
importt.addActionListener(this);
exit.addActionListener(this);
help = new JMenu("帮助");
aboutMI = new JMenuItem("关於..");
test = new JMenuItem("测试用");
mb.add(help);
help.add(aboutMI);
help.add(test);
aboutMI.addActionListener(this);
test.addActionListener(this);
fr.setJMenuBar(mb);
}
//创建组合方块函数
private void buildmachinepan(){
machinepan = new JPanel(new GridLayout(1,2));
machinename = new JLabel("未载入");
cmbModel = new DefaultComboBoxModel(){};
machinecmbbox = new JComboBox();
machinecmbbox.setModel(cmbModel);
machinecmbbox.addItemListener(this);
machinepan.add(machinename);
machinepan.add(machinecmbbox);
machinepan.setBorder(BorderFactory.createTitledBorder("监测机器"));
contenpan.add(machinepan, BorderLayout.NORTH);
}
//创建分页及列表的函数
private void buildTabbedPane()throws IOException{
//读取路径
FileReader fr = new FileReader("logpath.txt");
BufferedReader bfr = new BufferedReader(fr);
//检查是否结束
FileReader test = new FileReader("logpath.txt");
BufferedReader bfrtest = new BufferedReader(test);
while(bfrtest.readLine() != null){
String n = bfr.readLine();
String p = bfr.readLine();
chfpl.inster(n, p); //第一次取得机器名称 , 第二次readLine取得路径
cmbModel.addElement(n);
bfrtest.readLine();//测试是否结束用 的 第二次位移换行
}
fr.close();
bfrtest.close();
tabbedpanel = new JPanel();
contenpan.add(tabbedpanel, BorderLayout.CENTER);
//tabbedpanel.add(chfpl.front.link.chiefpan);
}
public void actionPerformed(ActionEvent e){
//测试是哪一种类别呼叫事件处理
Class ca1 = new JMenuItem().getClass();
if(ca1 == e.getSource().getClass()){
//测试是哪一个物件呼叫事件处理
if(e.getSource() == test){
System.out.print("test~~");
}
else if(e.getSource() == aboutMI){
aboutMIDl = new JDialog(fr, "关於..", true);
JLabel authorSchool = new JLabel(
"静宜大学-CSIE",JLabel.CENTER);
aboutMIDl.add(authorSchool);
aboutMIDl.pack();
aboutMIDl.show();
}
else if(e.getSource() == importt){
//呼叫汇入路径的物件
new setpath(fr);
//呼叫建立监测机器分页的路径档
try {
buildTabbedPane();
} catch (IOException e1) {e1.printStackTrace();}
this.fr.pack();
}
else if(e.getSource() == exit){
}
System.out.println("MenuBar is OK");
}
}
//组合方块处发事件处理
public void itemStateChanged(ItemEvent e){
//若选取改变时处理
if(e.getStateChange() == ItemEvent.SELECTED){
String nametemp = (String)e.getItem();
System.out.println("nametemp = " + nametemp);
machinename.setText((String)cmbModel.getSelectedItem());
//更换为所选取的版面
tabbedpanel.add(chfpl.search(nametemp).chiefpan, BorderLayout.CENTER);
System.out.println("itemStateChanged is called");
}
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.128.20.148
※ 编辑: baconcsie 来自: 140.128.20.148 (10/06 00:58)
1F:推 chronoer:有exception log吗? 10/06 09:58
2F:→ baconcsie:看不懂,你说的是什麽意思? 10/06 15:05
3F:→ sbrhsieh:先确定你的 ChiefpanelList 实做是正确(无问题)的。 10/06 20:32
4F:→ baconcsie:问题已经解决了~感谢板上大大解答 10/07 04:23