gpt4 book ai didi

java - 在新窗口中创建 JTable 作为 Java 中 JMenuItem 的 Action 监听器

转载 作者:行者123 更新时间:2023-11-30 07:20:01 25 4
gpt4 key购买 nike

我想创建一个包含 JTable 的新窗口作为按下 JMenuItem 的结果,我尝试在 Action 监听器中创建一个新类,但不确定如何正确的是。无论如何都行不通,请指教。

...

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);
}


}

最佳答案

看起来你似乎决心走这条路,你有很多选择......

艰难的道路......

public void actionPerfomed(ActionEvent e) {

TableModel model = //... Create the new model based on you needs
JTable table = new JTable(model);

JFrame frame = new JFrame();
frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(table));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);

}

这将需要您为每个 Action 监听器复制此代码...代码量很大...

稍微容易一些

自己创建一个简单的实现,将所有必需的逻辑包装到几个基本类中...

public class ModelPane extends JPanel {

private JTable table;

public ModelPane(TableModel model) {
setLayout(new BorderLayout());
table = new JTable(model);
add(new JScrollPane(table));
}

}

public class ModelFrame extends JFrame {

public ModelFrame(TableModel model) {
setLayout(new BorderLayout());
add(new ModelPane(model));
pack();
setLocationRelativeTo(null);
}

}

然后在你的 actionPerformed 方法中你可以简单地做...

public void actionPerfomed(ActionEvent e) {
TableModel model = //... Create the new model based on you needs
ModelFrame frame = new ModelFrame(model);
frame.setVisible(true);
}

这集中了显示和管理表格和数据的核心逻辑

好一点

使用第二个选项,您可以使用 Action API 生成提供生成模型所需信息的基本操作,但允许基本操作类实际确定 actionPerformed 方法应该有效...

public abstract class AbstractModelAction extends AbstractAction {

public abstract TableModel getModel();

@Override
public void actionPerformed(ActionEvent e) {
ModelFrame frame = new ModelFrame(getModel());
frame.setVisible(true);
}
}

public class CurrencyModelAction extends AbstractModelAction {

@Override
public TableModel getModel() {
return //... Create the new model based on you needs
}

}

查看 How to use Actions更多信息...

结论

使用最灵活并提供最佳重用的方法。我很少创建自定义 JFrame,只是因为我更喜欢创建面板,因为这意味着我可以在我想要的任何上下文中重复使用它们,灵活且可重复使用;)

关于java - 在新窗口中创建 JTable 作为 Java 中 JMenuItem 的 Action 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14287889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com