Java 为什么我的JTable不显示?

Java 为什么我的JTable不显示?,java,swing,layout-manager,null-layout-manager,Java,Swing,Layout Manager,Null Layout Manager,我正在尝试创建一个地址簿,而我目前需要的只是一个表来存储数据,但是我无法让它显示在面板上,你知道为什么吗?我有一个应该在执行时创建表的方法,但它不是 private String name; private String surname; private String phone; private String address; static String summary; private JPanel panel; private JFrame frame; private JLabel lb

我正在尝试创建一个地址簿,而我目前需要的只是一个表来存储数据,但是我无法让它显示在面板上,你知道为什么吗?我有一个应该在执行时创建表的方法,但它不是

private String name;
private String surname;
private String phone;
private String address;
static String summary;
private JPanel panel;
private JFrame frame;
private JLabel lblName;
private JLabel lblAddress;
private JLabel lblSurname;
private JLabel lblPhone;
private JTextField txtName;
private JTextField txtSurname;
private JTextField txtPhone;
private JTextField txtAddress;
private JButton btnSave;
private JButton btnUpload;
private JButton btnDelete;
String columns[] = {"Name","Surname","Phone","Address"};

String[][] data = 
    {{"human", "bean","07443244","somewhere"},
            {"Max", "Kenny","044353534","Somewhere"}};



public AddressBook() {
    createForm();
    createLabels();
    createTextField();
    createButton();
    createTable();
    frame.add(panel);
    frame.setVisible(true);

}
public void createLabels(){
    lblName = new JLabel ("Name");
    lblName.setBounds(10, 30, 100, 20);
    panel.add (lblName);

    lblSurname = new JLabel ("Surname");
    lblSurname.setBounds(10, 50, 100, 20);
    panel.add (lblSurname);

    lblAddress = new JLabel ("Address");
    lblAddress.setBounds(10, 70, 100, 20);
    panel.add (lblAddress);

    lblPhone = new JLabel ("Phone");
    lblPhone.setBounds(10, 90, 100, 20);
    panel.add (lblPhone);

}

public void createTextField(){

    txtName = new JTextField (null);
    txtName.setBounds(110, 30, 150, 20);
    panel.add (txtName);

    txtSurname = new JTextField (null);
    txtSurname.setBounds(110, 50, 150, 20);
    panel.add (txtSurname);

    txtAddress = new JTextField (null);
    txtAddress.setBounds(110, 70, 150, 20);
    panel.add (txtAddress);

    txtPhone = new JTextField (null);
    txtPhone.setBounds(110, 90, 150, 20);
    panel.add (txtPhone);

}

public void createForm(){
    panel = new JPanel();
    panel.setBorder (BorderFactory.createLineBorder (Color.RED, 3));
    panel.setLayout(null);



    frame = new JFrame();
    frame.setTitle("Address Book"); 
    frame.setSize(800,400);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


}

public void createButton(){
    btnSave = new JButton ("Save to a file");
    btnSave.setBounds(50, 200, 200, 20);
    btnSave.addActionListener(new SaveHandler());  
    panel.add (btnSave);


    btnDelete = new JButton ("Delete from the table");
    btnDelete.setBounds(50, 300, 200, 20);
    panel.add (btnDelete);

    btnUpload = new JButton ("Upload file to table");
    btnUpload.setBounds(50, 400, 200, 20);
    panel.add (btnUpload);


}

public void createTable(){
    JTable table = new JTable(data, columns);
    DefaultTableModel model = new DefaultTableModel();
    model.setColumnIdentifiers(columns);
    table.setModel(model);
    table.setBackground(Color.LIGHT_GRAY);
    table.setForeground(Color.black);
    table.setPreferredScrollableViewportSize(new Dimension(500, 70));
    table.setFillsViewportHeight(true);
    panel.add(table);
}

class SaveHandler implements ActionListener {

    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==btnSave)
        {
            name = ("");
            surname = ("");
            phone = ("");
            address = ("");

            name = txtName.getText();
            surname = txtSurname.getText();
            phone = txtPhone.getText();
            address = txtAddress.getText();

            summary = ("Name:" +name)+(surname)+("Phone:" + phone)+("Address:" + address);
            String saveFile = summary;

            try {
                BufferedWriter reader = new BufferedWriter(new FileWriter(new File("userinfo.txt"), true));
                reader.write(saveFile);
                reader.newLine();
                reader.close();
                JOptionPane.showMessageDialog(frame, "The details were sucessfuly saved");

            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }
    } }




public static void main(String[] args) {

    new AddressBook();

}
}

您选择不使用布局管理器,而是自己处理所有布局

但是,您没有为JTable指定大小和位置


我建议改为学习使用布局管理器。它将更好地工作,它将处理用户调整窗口大小的问题,并使代码更易于维护。

@breadkun,请从上的Swing教程部分开始,以获取信息和工作示例。您还需要查看目录中有关如何使用表格的部分。我想了解一个我不再费心解决的问题。2以最小尺寸提供ASCII艺术或GUI预期布局的简单绘图,如果可以调整大小,则提供更宽和更高的宽度和高度。
   panel.setLayout(null);
JTable table = new JTable(data, columns);
table.setModel(model);
table.setBackground(Color.LIGHT_GRAY);
table.setForeground(Color.black);
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
table.setFillsViewportHeight(true);