【问题标题】:How to create a JTable without directly assigning values如何在不直接赋值的情况下创建 JTable
【发布时间】:2016-12-05 14:49:44
【问题描述】:

我不确定如何在不直接将值分配给初始二维数组的情况下为 JTable 分配值,即String data[][]= new String[5][5]{"abc","def","ghi","jkl","mno"};

如果我声明了我的二维字符串数组,然后是defaultTableModel,有没有什么方法可以将 abc、def、ghi、jkl、mno 的值分配给 Array/JTable 而无需像上面那样在单独的方法可以吗?

更新

JPanel invoiceViewPanel= new JPanel(null);

String data[][]= new String[4][10];  
String columnHeaders[]={"Invoice ID","Invoice Name","Customer", "Complete?"};  

DefaultTableModel model = new DefaultTableModel(data, columnHeaders) {

boolean[] Editable= new boolean[]{
                false, false, false, true
        };

        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return editableCells[columnIndex];
        }

@Override
public Class<?> getColumnClass(int columnIndex)
{
    return columnClass[columnIndex];
}
};

JTable table=new JTable(model);  

JScrollPane tableContainer=new JScrollPane(table);      

final Class[] columnClass = new Class[] 
{
Integer.class, String.class, String.class, Boolean.class
};

 public void launch()
 {
this.setLayout(new FlowLayout());
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    


this.add(invoiceViewPanel);
invoiceViewPanel.add(tableContainer);
this.add(tableContainer);

this.setTitle("Invoices");
this.setSize(500,600);
this.setVisible(true);
this.setResizable(false);

 }

这是我的代码的基本版本。这只是我的 JTable 的初始化。

我有一个格式的文本文件

001/电视购买/约翰史密斯/真实

002/冰箱购买/Jean Smith/假

【问题讨论】:

标签: java swing jtable defaulttablemodel


【解决方案1】:

所有 Swing 组件都使用 Model。要更新组件,您需要更新模型。

因此,对于 JTable,您可以使用以下方法为您的表创建一个“空”模型:

String[] columnNames = { "Column1", "Column2", ... };
DefaultTableModel model = new DefaultTableModel(columnNames, 0);
JTable table = new JTable( model );

现在,当您想向模型中添加数据时,您可以使用:

Object[] row = {"data1", data2", ... };
model.addRow( row );

阅读DefaultTableModel API 了解更多更改数据的方法。您还可以将Vector 的数据添加到模型中。

【讨论】:

  • 那么这可以用它自己的方法实现吗?例如public void tableData {String row = {"data1", data2", ... }; model.addRow( row );} ?你会在哪里调用该方法?那么是否可以传入缓冲的阅读器?如果我有我的数据的文本文件;例如,如果我有格式为John,35,false 的文本文件,我可以将其转换为字符串并添加到行中吗?或者这是不可能的
  • Where would you call the method? - 我无法回答。您是编写代码的人。 for example if I had text file of format... - 您需要将数据格式化为表格模型可以理解的格式。例如,您可以使用String.split(...) 方法创建一个字符串数组,然后使用addRow(...) 方法。
  • 我添加了一些代码和文本文件数据,如果您可以对我之前的评论提供一些建议吗?
  • @User22,String 不是Array。如果您查看所涉及方法的 API,您会注意到您需要一个数组,而不是字符串。您使用String string = "a string"; 创建String 如果您想要Array,您需要使用:String[] row = {....}. 抱歉,我刚刚注意到我的答案中有错字。每当有人发布代码时,您都需要花时间了解发布代码的概念。我们发布的代码未经测试。使用创建数组的正确语法更新了代码。
  • 另外,不要在 cmets 中发布代码段。该代码应添加到您的问题中,以便其可读。最后,在您的情况下,您不能使用字符串数组,因为您的数组将包含字符串和布尔值,因此您需要创建一个对象数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-30
  • 2020-04-10
  • 2019-07-06
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
相关资源
最近更新 更多