![](/img/trans.png)
[英]Rendered JPanel with JcheckBoxes inside an Jtable cell. Now the Panel is not getting align to centre of the cell in Jtable
[英]Need to launch a new JPanel on click event in a JTable cell.
我想创建一个JTable,其最后一列带有高级选项图标。 在单击JTable的最后一列时,我希望弹出一个新的JPanel,允许用户输入所需的4个字符串输入字段的输入。 当关闭此JPanel时,应返回到原始JTable。
我不确定从新的JPanel将4个字段的数据保存在哪里。 因为它们是每个JTable行的4个字符串输入字段,仅显示在JPanel中。
我的JTabel单元可以容纳保存数据的对象吗?
用例:我有一个包含10列的JTable。 它变得非常混乱,因此我想将5列移至新面板,该面板将在单击原始JTable最后一列中的高级选项图标时启动。
我们将高度赞赏有关如何将来自JPanel的数据与JTable中的行关联的示例代码。
为了在单击单元格时显示弹出窗口,您需要一个单元格编辑器类。 此类的主要目的是为单元格提供自定义编辑器,但是您可以在单击单元格时使用它来触发某些操作:
public class InfoCellEditor extends AbstractCellEditor implements TableCellEditor {
@Override
public java.awt.Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
InfoObject info = (InfoObject) value;
editButton = new JButton(new InfoAction(info));
editButton.setText("INFO");
editButton.setEnabled(true);
}
private class InfoAction extends AbstractAction {
InfoObject info;
public InfoAction(InfoObject info) {
super();
this.info = info;
}
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, info.toString());
stopCellEditing();
}
}
}
然后,扩展JTable
类并实现getColumnClass
和isCellEditable
方法:
public class MyTable extends JTable {
public MyTable() {
super();
setDefaultEditor(InfoObject.class, new InfoCellEditor());
}
@Override
public Class getColumnClass(int columnIndex) {
if(columnIndex == 4)
return InfoObject.class;
else
return String.class;
}
@Override
public boolean isCellEditable(int row, int column) {
if(column == 4)
return true;
else
return false;
}
}
最后,您应确保将InfoObject实例插入到第5列。 您还可以为该列的某些自定义视觉表示实现TableCellRenderer。
Object headers = new Object[COLUMN_COUNT];
Object cells[][] = new Object[ROW_COUNT][];
...
cells[0][4] = new InfoObject(data[0]);
cells[1][4] = new InfoObject(data[1]);
table.setModel(new DefaultTableModel(cells, headers));
table.getModel().fireTableDataChanged();
table.setVisible();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.