swing在新窗口中创建JTable作为Java中JMenuItem的操作侦听器
我想创建一个包含JTable
的新窗口。由于按了JMenuItem
,我尝试在动作侦听器内创建一个新类,但不确定这是否正确。不管怎样,它不起作用,请建议
...
help.add(currencyTable);
...
//action listener for the currency table JMenuItem button
currencyTable.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e)
{
class currencyJTableClass extends JFrame
{
JTable currencyTable;
public currencyJTableClass()
{
setLayout(new FlowLayout());
String[] headLine = {"x","y","z"} ;
String [][] currencyData =
{
{
"a","b","c"
},
{
"d","e","f"
},
};
currencyJTable = new JTable(currencyData,headLine);
}
}
# 1 楼答案
看来你似乎决心走这条路,你有很多选择
艰难的道路
这将要求您在每个操作侦听器中复制此代码。。。这是很多代码
稍微容易
自己创建一个简单的实现,将所有必需的逻辑包装成几个基本类
然后在你的
actionPerformed
方法中,你可以简单地做这将集中显示和管理表和数据的核心逻辑
好一点
使用第二个选项,您可以使用
Action
API生成基本操作,这些操作提供生成模型所需的信息,但允许基本操作类实际确定actionPerformed
方法的工作方式查看How to use Actions了解更多信息
结论
使用最灵活且提供最佳重用的方法。我很少创建自定义的
JFrame
,因为我更喜欢创建面板,因为这意味着我可以在我想要的任何上下文中重用它们,灵活且可重用;)# 2 楼答案
不要在
ActionListener
中创建JFrame
或JTable
。相反,在启动时创建一个带有JTable
和TableModel
的单JFrame
。然后,在ActionListener
中,使用希望显示的数据更新模型开始学习如何使用表模型时,请从
DefaultTableModel
开始,因为它支持通过使用addRow和removeRow对模型进行动态更改这是一个example
注意:如果您不需要创建一个单独的窗口来显示数据,则有以下几种可能性:
JDialog
-将用户焦点吸引到窗口中的内容