有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法将JTable添加到GUI中

我在GUI中创建JTable时遇到问题。GUI是在主线程中创建的,可以打开文件。然后使用该文件创建表模型并向其中添加信息。然后使用表模型创建一个JTable,并将其添加到GUI中。我的问题是GUI没有显示。代码:

package example;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;


public class Example extends JFrame{

    private JButton button;
    private JTable table;
    private DefaultTableModel model;
    private String path = "C:/Users/gilbert/Documents/11111.xls";

    public Example(){
    super("Example");   
        setLayout(new BorderLayout());
        button = new JButton("Start");
        button.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            createTableModel_Three_By_Six(path);
        }
    });
        add(button,BorderLayout.NORTH);
        setSize(400, 400);    
    }

    public void createTableModel_Three_By_Six(String fpath){

        model =  new  DefaultTableModel();
        ExcelParser exPareser =  new  ExcelParser(fpath);
        int rows = exPareser.getRowNumber();
        String rowToAdd[] = new String[3];
        int i, j = 0;
        while(j < rows){
            i= 0;
            while(i < 3){
                rowToAdd[i] = exPareser.accessRow(j);
                i++;
                j++;
            if(j == rows){
                if(i==1){
                    rowToAdd[1] = "";
                    rowToAdd[2] = "";
                }
                else if(i==2){
                    rowToAdd[2] = "";
                }
            }
        }
            model.addRow(rowToAdd);
        }
        table = new JTable(model);
        add(new JScrollPane(table));

    }

    public static void main(String[] args) {


        Example app = new Example();
        app.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        app.setVisible(true);
    }

}

共 (1) 个答案

  1. # 1 楼答案

    在您的示例中,问题在于表没有列,这意味着当您将表添加到框架中时,它不知道如何显示表内容

    所以,通过做一些简单的事情

    model = new DefaultTableModel(new Object[]{"A", "B", "C"}, 0);
    //...
    table = new JTable(model);
    add(new JScrollPane(table));
    revalidate();
    

    我能够让桌子正确地显示,包括它的内容

    不过要注意,每次调用此方法时,都会创建一个新的JTable。相反,您应该在早期阶段构造JScrollPaneJTable,只需更新TableModel