java - 需要在 Swing Java 中将特定单元格拆分为两个 JTextField

标签 java swing jtable tablecellrenderer

我有一个 Jtable 并分配为列渲染。 现在我想将特定单元格分成两部分,以便我可以为其提供两个值。 分割可以通过 Cellrenderer 进行,也可以通过其他方式进行。 enter image description here

最佳答案

使用 JPanelGridLayout作为单元格渲染器:

public Component getTableCellRendererComponent(JTable table, Object value, 
  boolean isSelected, boolean hasFocus,int row,int col) {
    if (isSplitted(value) {
        JPanel panel = new JPanel(new GridLayout(1,2));
        JLabel left = new JLabel(getLeft(value));
        JLabel right = new JLabel(getRight(value));        
        panel.add(left);
        panel.add(right);    
        return panel; 
      } else {
        return super.getTableCellRendererComponent(
           table, value, isSelected, hasFocus, row, col)
      }
}  

此处,getLeftgetRightisSplitted 由您定义在该单元格中呈现的值。

如果有意义的话,您还可以优化保留带有两个标签的该面板的实例;设置所需内容后,可以在每次调用时重复使用它。对于左右组件大小相差很大的情况,BorderLayout 可能效果更好。

同样,您可以提供单元格编辑器,只需要 JTextField 等,因为 JLabel 不可编辑。源自AbstractCellEditor ,重写 getCellEditorValue (返回由面板组成的值)和 getTableCellEditorComponent (将字段设置为当前值后返回面板本身)。

@Stifler 对我的回答发表了评论:

public Component getTableCellRendererComponent(JTable table, Object obj, 
    boolean isSelected,  boolean hasFocus, int row, int column) {
    Component cell = super.getTableCellRendererComponent(
      table, obj, isSelected, hasFocus, row, column);
    JPanel panel = new JPanel(new GridLayout(1, 2));
    if ("History".equals(obj)) {
        JTextField left = new JTextField("Left");
        left.setEditable(true);
        JTextField right = new JTextField("Right");
        left.setEditable(true);
        panel.add(left);
        panel.add(right);
        return panel;
    }
    return cell;
}  

关于java - 需要在 Swing Java 中将特定单元格拆分为两个 JTextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17206617/

相关文章:

java - Jtable 与 AbstractTableModel 删除所有行

java - 获取 JTable 中选定的行

java - 如何将全局变量设置为 JSLint 以忽略整个文件集?

java - 在 Ant 中从 JAXB 类文件生成 XML 模式

java - 通过串行连接将minecraft插件连接到arduino

java - 每次鼠标移动时获取鼠标坐标

java - 如何在Java中单击JLabel时更改JLabel背景

java - 将 JTable 保存为文本文件

java - 避免输出参数(没有副作用)

java - 连接/链接 JTable UI