gpt4 book ai didi

java - 检修台模型 Swing

转载 作者:行者123 更新时间:2023-12-02 05:35:50 25 4
gpt4 key购买 nike

我想让我的应用程序很好,没有 100 个内部类和其他东西。我有一个类包含一些包含数据的列表。我有菜单,其中包含使用 AbstractActions 的项目,例如。我想要在那里执行操作以从表中删除所选项目。为此,我需要表和表模型的引用。我想将此操作添加到菜单项,我需要传递稍后创建的表和表模型的引用,如下所示:

    MainMenuBar menuBar = new MainMenuBar(db);
MainTabbedPane tabbedPane = new MainTabbedPane(db);

this.setLayout(new BorderLayout());
add(menuBar, BorderLayout.PAGE_START);
add(tabbedPane, BorderLayout.CENTER);

其中 tabbedPane 有 2 个选项卡和 2 个表格。那么有什么帮助如何以一种好的方式做到这一点吗?

最佳答案

如果JTable支持泛型就好了,这会让生活变得更轻松,但事实并非如此,所以我们没有太多选择。

一种解决方案是利用 Actions API ,这将允许您定义一系列独立的“操作”,这些操作可以同样应用于菜单、按钮和键绑定(bind)。

例如...

public abstract class AbstractTableAction<M extends TableModel> extends AbstractAction {
private JTable table;
private M model;

public AbstractTableAction(JTable table, M model) {
this.table = table;
this.model = model;
}

public JTable getTable() {
return table;
}

public M getModel() {
return model;
}
}

然后您可以定义更有针对性的操作...

public class DeleteRowAction extends AbstractTableAction<MutableTableModel> {
public DeleteRowAction (JTable table, MutableTableModel model) {
super(table, model);
putValue(NAME, "Delete selected row(s)");
}

public void actionPerformed(ActionEvent evt) {
JTable table = getTable();
int rows[] = table.getSelectedRows();
for (int index = 0; index < rows.length; index++) {
rows[index] = table.convertRowIndexToModel(rows[index]);
}
getModel().removeRows(rows);
}
}

现在,显然,MutableTableModel 只是示例,但它是 TableModel 的特定实现,可提供您所需的功能。

此方法允许您将这些操作应用于 JMenuItemJButton 和键绑定(bind),这意味着您可以分配 Action > 到Delete,这样当表格获得焦点时按下,就会触发Action

您可以通过定义某种提供对当前表/模型的访问的 Controller 来进一步抽象该概念,因此您只需要创建一系列Action,它采用“ Controller ”作为引用。然后 Controller 将为 View /程序的当前状态提供上下文(即当前处于 Activity 状态的表/模型),例如...

关于java - 检修台模型 Swing ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24986087/

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