繁体   English   中英

如何重绘我的JTable

[英]How to repaint my JTable

所以我有一个带有JTable的应用程序。 JTable在JScrollPane内部,并且JScrollPane绘制在JFrame上。

现在,在我的应用程序中,我打开一个新窗口,向该表添加新行,然后单击按钮保存更改,然后关闭新窗口。

现在,我尝试在关闭新窗口后添加以下行:

askTableInfo(); //a method to save the info in database to table and then save the table to variable 'table'
table.repaint();
scrollPane.repaint(); 

当然是repaint(); 通过它自己。 但是它似乎仍然无法更新JFrame中的表格。

这里可能是什么问题?

public class AppWindow extends JFrame implements ActionListener {
    String user = "";
    JLabel greetText = new JLabel();
    JPanel panel = new JPanel();
    JPanel panel2 = new JPanel(new GridLayout(1, 3));
    JScrollPane scrollPane;
    JTable tabel;
    JButton newBook = new JButton("Add a book");
    JButton deleteBook = new JButton("Remove a book");
    JButton changeBook = new JButton("Change a book");
    int ID;

    public AppWindow(String user, int ID) {
        this.ID = ID;
        this.user = user;
        setSize(500, 500);
        setTitle("Books");

        setLayout(new BorderLayout());
        greetText.setText("Hi "+user+" here are your books:");
        add(greetText, BorderLayout.NORTH); 

        askData();  
        panel.add(scrollPane);
        add(panel, BorderLayout.CENTER);

        panel2.add(newBook);
        panel2.add(deleteBook);
        panel2.add(changeBook);
        add(paneel2, BorderLayout.SOUTH);

        newBook.addActionListener(this);

        setVisible(true);
    }

    private void askData() {
        DataAsker asker = null;
        try {
            asker = new AndmeKysija(ID);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        table = asker.giveTable();
        scrollPane = new JScrollPane(tabel);
    }

    public static void main(String[] args){
        AppWindow window = new AppWindow("Name", 2);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == newBook){
                new BookAdded(ID);
                panel.revalidate();
                panel.add(scrollPane);
                panel.repaint();
                repaint();
        }   
    }
}

这不是最好的方法,但是它会让您越界...

public AppWindow(String user, int ID) {
    this.ID = ID;
    this.user = user;
    setSize(500, 500);
    setTitle("Books");

    setLayout(new BorderLayout());
    greetText.setText("Hi "+user+" here are your books:");
    add(greetText, BorderLayout.NORTH); 

    JTable table = askData();  
    scrollPane.setViewportView(table);
    panel.add(scrollPane);
    add(panel, BorderLayout.CENTER);

    panel2.add(newBook);
    panel2.add(deleteBook);
    panel2.add(changeBook);
    add(paneel2, BorderLayout.SOUTH);

    newBook.addActionListener(this);

    setVisible(true);
}

private JTable askData() {
    DataAsker asker = null;
    try {
        asker = new AndmeKysija(ID);
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return asker.giveTable();
}

public static void main(String[] args){
    AppWindow window = new AppWindow("Name", 2);
}

@Override
public void actionPerformed(ActionEvent e) {
    if(e.getSource() == newBook){
        new BookAdded(ID);
        JTable table = askData();  
        scrollPane.setViewportView(table);
    }   
}

您应该做的是根据AndmeKysija的结果创建一个新的TableModelAndmeKysija应该具有UI的概念或概念。 然后,您只需要使用JTable#setModel来更新视图...

Swing使用Model-View-Controller范例的变体

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM