在 JTabbedPane 中更改选项卡时如何停止在 JTable 中编辑 JCombobox
How to stop editing a JCombobox in a JTable when changing tab in a JTabbedPane
我需要添加一个 JCombobox,它在 JTable 中有一个可编辑的文本字段。此 JTable 存在于 JTabbedPane 的选项卡中。
问题是,每当我将组合框文本编辑器保持在编辑模式并更改选项卡时,组合框文本框仍仅处于编辑状态。我希望在更改选项卡时禁用它。
我试过将 requestfocus 添加到 tabbedpane 但没有用。请建议在单击选项卡时使组合框的此文本字段处于非活动状态的任何方法。
向选项卡式窗格添加 ChangeListener
以捕获选项卡更改事件。从该侦听器,您可以委托一个方法来阻止 JTable 编辑器进行编辑。
ChangeListener changeListener = new ChangeListener() {
int previousIndex = 0;
public void stateChanged(ChangeEvent changeEvent) {
JTabbedPane tbPane = (JTabbedPane) changeEvent.getSource();
stopTableEditor(tbPane.getComponentAt(previousIndex));
previousIndex = tbPane.getSelectedIndex();
}
private void stopTableEditor(Component component) {
JTable table = ... // retrieve table instance from component
if(table.isEditing())
table.getCellEditor().stopCellEditing();
}
};
我需要添加一个 JCombobox,它在 JTable 中有一个可编辑的文本字段。此 JTable 存在于 JTabbedPane 的选项卡中。
问题是,每当我将组合框文本编辑器保持在编辑模式并更改选项卡时,组合框文本框仍仅处于编辑状态。我希望在更改选项卡时禁用它。
我试过将 requestfocus 添加到 tabbedpane 但没有用。请建议在单击选项卡时使组合框的此文本字段处于非活动状态的任何方法。
向选项卡式窗格添加 ChangeListener
以捕获选项卡更改事件。从该侦听器,您可以委托一个方法来阻止 JTable 编辑器进行编辑。
ChangeListener changeListener = new ChangeListener() {
int previousIndex = 0;
public void stateChanged(ChangeEvent changeEvent) {
JTabbedPane tbPane = (JTabbedPane) changeEvent.getSource();
stopTableEditor(tbPane.getComponentAt(previousIndex));
previousIndex = tbPane.getSelectedIndex();
}
private void stopTableEditor(Component component) {
JTable table = ... // retrieve table instance from component
if(table.isEditing())
table.getCellEditor().stopCellEditing();
}
};