Java 编辑JTable单元格,作为JTree节点

Java 编辑JTable单元格,作为JTree节点,java,swing,jtable,edit,jtree,Java,Swing,Jtable,Edit,Jtree,我的目标是将JTable用作JTree节点,并能够通过双击来编辑JTable中的单元格。渲染效果很好(),但我不知道如何编辑表中的单个单元格。如果我将树设置为可编辑,我可以使用双击编辑节点,但我希望自己编辑单元格,因为用户可能不愿意在我用于渲染的数字前面保留“%”。如果树未设置为可编辑,双击不会执行任何操作。有没有一个简单的方法来实现这一点 public class TreeWithCellRenderer { static class MyCellRenderer implements Tr

我的目标是将JTable用作JTree节点,并能够通过双击来编辑JTable中的单元格。渲染效果很好(),但我不知道如何编辑表中的单个单元格。如果我将树设置为可编辑,我可以使用双击编辑节点,但我希望自己编辑单元格,因为用户可能不愿意在我用于渲染的数字前面保留“%”。如果树未设置为可编辑,双击不会执行任何操作。有没有一个简单的方法来实现这一点

public class TreeWithCellRenderer {

static class MyCellRenderer implements TreeCellRenderer {
    @Override
    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded,
            boolean leaf, int row, boolean hasFocus) {

        String command = (String) ((DefaultMutableTreeNode) value).getUserObject();
        final String[] params = command.split("%");
        JTable table = new JTable();

        table.setModel(new DefaultTableModel() {
            private static final long serialVersionUID = 1L;

            @Override
            public int getRowCount() {
                return 1;
            }

            @Override
            public int getColumnCount() {
                return params.length;
            }

            @Override
            public Object getValueAt(int row, int column) {
                return params[column];
            }
        });
        return table;
    }
}

private static void createAndShowGUI() {
    // Create and set up the window.
    JFrame frame = new JFrame("JTreeTutorial");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    // Tree components
    DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
    DefaultMutableTreeNode cmd1 = new DefaultMutableTreeNode("name %1");
    DefaultMutableTreeNode cmd2 = new DefaultMutableTreeNode("name %1 %2");
    root.add(cmd1);
    root.add(cmd2);

    JTree jTree = new JTree(root);
    //Don't like it too much, as it makes you edit the whole node, not cells
    //jTree.setEditable(true);
    jTree.setCellRenderer(new MyCellRenderer());
    JScrollPane scroolPane = new JScrollPane(jTree);
    frame.add(scroolPane);

    // Display the window.
    frame.pack();
    frame.setVisible(true);
}

public static void main(String[] args) {
    createAndShowGUI();
}
}

  • 创造自己的,

  • 你的


您应该为数据模型添加方法isCellEditable。否则,您的表将不可编辑

可能是这样的:

@Override
public boolean isCellEditable(int row, int col) 
{
    return col >= 0;
}

谢谢我尝试按照中的示例进行操作,但这允许我编辑树单元,这是整行,我只想编辑此行中的一个单元。你能举个例子吗?我是Swing的初学者。我使用的唯一模型是表的模型,它是从DefaultTableModel扩展而来的,DefaultTableModel的isCellEditable方法类似于:public boolean isCellEditable(int row,int column){return true;},所以我认为没有必要。