Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在表格单元格中使用组件,而不仅仅是字符串_Java_Swing_Jtable_Tablecelleditor - Fatal编程技术网

Java 在表格单元格中使用组件,而不仅仅是字符串

Java 在表格单元格中使用组件,而不仅仅是字符串,java,swing,jtable,tablecelleditor,Java,Swing,Jtable,Tablecelleditor,如何可能将组件也用作单元格内容,而不仅仅是字符串、布尔值和整数 String[] petStrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" }; String[] columnNames = {"name", "elem"}; Object[][] data = { {"button", new JButton("test")}, {"select", new JComboBox(petStrings)} }; JTable ta

如何可能将组件也用作单元格内容,而不仅仅是字符串、布尔值和整数

String[] petStrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" };
String[] columnNames = {"name", "elem"};
Object[][] data = {
    {"button", new JButton("test")},
    {"select", new JComboBox(petStrings)}
};

JTable table = new JTable(data, columnNames);
现在我看不到按钮和表中的组合框,只有
javax.swing.JComboBox…

也许我应该以某种方式扩展JTable,但我不知道如何扩展。了解您已经在JTable单元格中使用某种组件。显示时,JTable正在呈现TableCellRenderer,该对象必须返回每个单元格显示的组件。编辑单元格时,JTable将显示(通常)不同的对象,即TableCellEditor生成的组件。然后,您的工作是根据您的需要更改表的renderor和/或editor,这些步骤太长,无法在此答案中简单显示。同样,教程将为您指明方向

请注意,无论您在解决方案中采用何种方式,JTable的单元渲染器都不会显示任何实际组件,而是只显示组件的渲染,这是一个很大的区别。但是,单元格编辑器将显示实际组件,但仅当单元格处于编辑状态时

另一方面,该表用作数据的表格表示,通常,在每列中显示相同类型的数据,因此您必须给出一个强有力的论据,说服我让一个JTable列有时显示一个JButton,有时显示一个JComboBox

例如,要让一个JTable列的编辑器显示组合框,可以将其默认单元格编辑器设置为使用组合框,如下所示:

  String[] petStrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" };
  JComboBox<String> petCombo = new JComboBox<>(petStrings);
  String[] columnNames = {"name", "elem"};
  Object[][] data = {
      {"Pet 1", null},
      {"Pet 2", null}
  };

  DefaultTableModel model = new DefaultTableModel(data, columnNames);
  JTable table = new JTable(model);
  table.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(petCombo));
String[]petStrings={“鸟”、“猫”、“狗”、“兔”、“猪”};
JComboBox-petCombo=新的JComboBox(petStrings);
String[]columnNames={“name”,“elem”};
对象[][]数据={
{“宠物1”,null},
{“宠物2”,null}
};
DefaultTableModel=新的DefaultTableModel(数据、列名称);
JTable table=新的JTable(模型);
table.getColumnModel().getColumn(1).setCellEditor(新的DefaultCellEditor(petCombo));

请参阅。这里有一个栏目,谢谢。但是,如何在第一行和第二行设置不同的单元格编辑器?@IterAtor:通过创建自己的单元格编辑器。这将需要一点工作,对我来说,通常不值得付出努力。你用这个干什么?为什么在同一列中有不同的组件?需要什么?@IterAtor:那么你最好的办法就是完整地读一遍,然后试一试。