【问题标题】:I cannot get my program to import data from a txt into a Jtable我无法让我的程序将数据从 txt 导入 Jtable
【发布时间】:2017-06-07 05:59:24
【问题描述】:

我的程序能够读取我的 .txt 文件,但由于某种原因,它无法将该数据放在我的表中。 (如果您需要我的代码的任何其他部分,请告诉我)。我不确定到底是什么问题,但我几乎尝试了所有方法将它输入到表格中,但似乎没有任何效果。我能够手动将数据输入到表中(使用创建按钮),但由于某种原因,我无法导入数据。

//initializing all of the buttons (and jtable, scroll pane)
this.jScrollPane1 = new JScrollPane();
this.pokeTable = new JTable();
this.programTitle = new JLabel();
this.searchText = new JTextField();
this.searchButton = new JButton();
this.createButton = new JButton();
this.deleteButton = new JButton();
this.displayInstructionsButton = new JButton();
this.exportPokedex = new JButton();

//sets close operation
setDefaultCloseOperation(3);

//makes my Jtable
  this.pokeTable.setModel(new DefaultTableModel(
  new Object[0][], 
  new String[] {"Name", "Region", "PokeNumber", "Type", "Habitat" }) //creating column headings
  {
    boolean[] canEdit = new boolean[5];

    public boolean isCellEditable(int rowIndex, int columnIndex) //makes all of the cells editable
    {
      return this.canEdit[columnIndex]; 
    }
  });


  IO.openInputFile("data/pokemon.txt");
  int j =0;
  while(IO.readLine()!=null){   
    j++;
  }
  IO.closeInputFile();

  IO.openInputFile("data/pokemon.txt");

  String[] pokemon2 = new String[5];

  for(int i = j; i!=0; i--)
  {

    String s = IO.readLine();
    pokemon2 = s.split(",");


    DefaultTableModel model = (DefaultTableModel)this.pokeTable.getModel();
    model.addRow(new Object[] { pokemon2[0], pokemon2[1], Integer.valueOf(pokemon2[2]), pokemon2[3], pokemon2[4] });
     new Pokemon (pokemon2[0], pokemon2[1], Integer.valueOf(pokemon2[2]), pokemon2[3], pokemon2[4]);
    for(int f = 0; f < pokemon2.length; f++){
        System.out.println(pokemon2[f]);
        System.out.println("");
    }
  }

  IO.closeInputFile();  

this.jScrollPane1.setViewportView(this.pokeTable); //makes table able to scroll
this.jScrollPane1.getViewport().setBackground(new Color (233, 116, 81)); //sets background of table (not cell colour)
//end of intializing JTable

//sets title of the program
this.programTitle.setText("Pokedex");

【问题讨论】:

  • 使用 SO 作为调试器是一个糟糕的主意。就调试小程序而言,您尝试过什么?您是否尝试过调试或打印值来测试您的断言?

标签: java arrays file arraylist jtable


【解决方案1】:

我对你的建议是拆分不同的变量,你试图一步做太多,而不是

this.pokeTable.setModel(new DefaultTableModel(
new Object[0][],new String[] {"Name", "Region", "PokeNumber", "Type", "Habitat" })

创建单独的变量

String[] headers = {"Name", "Region", "PokeNumber", "Type", "Habitat" };
Object[][] arr = new Object[fileLength][headers.length];
DefaultTableModel model = new DefaultTableModel(arr, headers);
this.pokeTable.setModel(model);

一般来说,这可以排除许多小错误,然后继续编写检查语句以缩小问题发生的确切位置;当它工作时,您可以将其缩小为一行,但将其分解通常足以发现和修复错误。也许在尝试创建表之前先尝试填充数组。我有一些代码可以实现这个结果,但使用数据库是:

Object[][] data;

//Get data from table and convert to 2D array
data = new Object[len][columnNames.length];
String sql = "SELECT * FROM SHM";
ResultSet rs = st.executeQuery(sql);
int x = 0;
while (rs.next()){
    for(int i = 0; i < columnNames.length; i++) {
       data[x][i] = new Double(rs.getDouble(columnNames[i]));
    }                
    x++;
}
rs.close();
//Output data
JFrame frame = new JFrame("Table");
TableModel model = new DefaultTableModel(data, columnNames);
JTable table = new JTable(model);
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
frame.add(new JScrollPane(table));
frame.setAlwaysOnTop(true);
frame.pack();
frame.setVisible(true);

尝试以这种格式实现它,将其拆分以确保您的工作,在将其放入表之前从文件创建 2Darray,而不是创建表并尝试以这种方式添加新行;如果您以后想添加新行,请让它重新绘制表格。如果这仍然不起作用,我不确定抱歉。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-27
    • 2018-05-24
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多