我想有程序里动态的加载JMenu、JMenuItem和JButton,目的是不同的用户对应不同的功能菜单。
之前发贴有朋友告诉用XML文件来记录数据信息,但遇到了难题,每个被触发的事件那又怎样来处理呢?请朋友们帮帮忙,想了好几天都没有一个好的解决方法,想看看别人是怎样来完善的处理的,谢谢大家!!!
之前发贴有朋友告诉用XML文件来记录数据信息,但遇到了难题,每个被触发的事件那又怎样来处理呢?请朋友们帮帮忙,想了好几天都没有一个好的解决方法,想看看别人是怎样来完善的处理的,谢谢大家!!!
所有的控件都是类。去实例化你需要的每一个控件。再去设置控件的属性,有些可以在构造函数里完成。去看构造函数。有些常用的属性我也不说了,我也不去记看了就知道。
窗体上通常加一个JPanel,如果你不用可视化得自己写。所有容器控件都有Add()方法。控件常用的属性:位置,文本,大小。看你现在最需要的是Swing的API。有问题去思考两小时,就算想不出来你也有很大收获。时间久了,你就拥有了编程的思想。
楼上说:有问题去思考两小时。哎,头大了,不只两个小时了请大伙帮帮忙。
computeTable.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e) { if (SwingUtilities.isRightMouseButton(e)){
JPopupMenu menu = new JPopupMenu();
JMenuItem addItem = new JMenuItem("Add");
menu.add(addItem);
addItem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) {
computeModel.addRow(new Object[]{""});
}
});
JMenuItem moveItem = new JMenuItem("Move");
menu.add(moveItem);
moveItem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) {
computeModel.removeRow(computeTable.getSelectedRow());
if (computeTable.getRowCount() < 1){
computeModel.addRow(new Object[]{""});
}
}
});
menu.show(computeTable,e.getX(),e.getY());
}
}
});
}
computeTable.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e) {
//判断是否是双击
if (SwingUtilities.isRightMouseButton(e)){
JPopupMenu menu = new JPopupMenu();
JMenuItem addItem = new JMenuItem("Add");
menu.add(addItem);
//添加事件处理
addItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
computeModel.addRow(new Object[]{""});
}
});
//动态加添加快捷菜单
JMenuItem moveItem = new JMenuItem("Move");
menu.add(moveItem);
//添加事件处理
moveItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
computeModel.removeRow(computeTable.getSelectedRow());
if (computeTable.getRowCount() < 1){
computeModel.addRow(new Object[]{""});
}
}
});
menu.show(computeTable,e.getX(),e.getY());
}
}
});
每个button和对应的监听器间的关系也写到配置文件里,到时候动态加载控件的时候把监听器也同时初始化了与按钮联系起来。这不就可以监听按钮的事件了。一个思路,你可以试试。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE commands SYSTEM "commands.dtd">
<commands version="1.1.0">
<group id="menu.main">
<face>
<text>Main Menu</text>
</face>
<members>
<member command-id="menu.file"/>
<expansion-point/>
<glue/>
<member command-id="menu.help"/>
</members>
</group>
<group id="main.toolbar">
<face name="toobar">
<text>GUI Commands Toolbar</text>
</face>
<members>
<!-- <member command-id="menu.help.about"/>
<member command-id="menu.help.about"/>
<member command-id="menu.help.about"/>
<member command-id="menu.help.about"/>
<member command-id="page.selectors" inline="true" />
<expansion-point separator="after"/>-->
</members>
</group>
<group id="menu.file">
<face>
<text mnemonic="f">File</text>
</face>
<members>
<member command-id="menu.file.connect"/>
<expansion-point separator="after"/>
<member command-id="menu.file.exit"/>
</members>
</group>
<group id="menu.help">
<face>
<text mnemonic="h">Help</text>
</face>
<members>
<expansion-point separator="after"/>
<member command-id="menu.help.about"/>
</members>
</group>
<group id="page.selectors">
<face>
<text mnemonic="p">Pages</text>
</face>
<members>
<!-- <expansion-point/>-->
</members>
</group> <command id="menu.file.exit">
<face>
<text mnemonic="x">Exit</text>
<description>Close and exit the demo</description>
<accelerator key="F4">
<modifier value="alt"/>
</accelerator>
</face>
</command>
<command id="menu.help.about">
<class>org.york.chat.ui.command.AboutCommand</class>
<face>
<text mnemonic="a">About</text>
<!--<icon type="classpath">org/york/ui/resources/copy.gif</icon>-->
<accelerator key="F1"/>
</face>
</command>
<command id="menu.file.connect">
<class>org.york.chat.ui.command.ConnectCommand</class>
<face>
<text mnemonic="a">connect</text>
<!--<icon type="classpath">org/york/ui/resources/copy.gif</icon>-->
<accelerator key="F2"/>
</face>
</command>
</commands>
构造MENU,在把他加入FRAME中,你一般是通过可视界面创建,觉得很难,其实很容易的