- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想让我的应用程序很好,没有 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
支持泛型就好了,这会让生活变得更轻松,但事实并非如此,所以我们没有太多选择。
一种解决方案是利用 Action
s 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
的特定实现,可提供您所需的功能。
此方法允许您将这些操作应用于 JMenuItem
、JButton
和键绑定(bind),这意味着您可以分配 Action
> 到Delete,这样当表格获得焦点时按下,就会触发Action
您可以通过定义某种提供对当前表/模型的访问的 Controller 来进一步抽象该概念,因此您只需要创建一系列Action
,它采用“ Controller ”作为引用。然后 Controller 将为 View /程序的当前状态提供上下文(即当前处于 Activity 状态的表/模型),例如...
关于java - 检修台模型 Swing ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24986087/
我是一名优秀的程序员,十分优秀!