首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从JTable更新DefaultTableModel

从JTable更新DefaultTableModel
EN

Stack Overflow用户
提问于 2016-04-08 01:12:21
回答 1查看 618关注 0票数 0

所以,我想要做的是在按下按钮时更新JTable。我使用一个DefaultTableModel作为源。表类:

代码语言:javascript
复制
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import java.awt.Dimension;

public class TableDemo extends JPanel {
    String[] columnNames = {"Tipo","Cantidad"};
    DefaultTableModel dtm = new DefaultTableModel(null,columnNames);
    final JTable table = new JTable(dtm);

 public TableDemo() {
    table.setPreferredScrollableViewportSize(new Dimension(500, 700));
    table.setFillsViewportHeight(true);
    JScrollPane scrollPane = new JScrollPane(table);
    add(scrollPane);
 }

 public void addRow(Object [] row)
 {
     dtm.addRow(row);
 }

}

表格类:

代码语言:javascript
复制
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextField;

public class MyForm extends JFrame {

JPanel panel;
JLabel label;
JTextField txtName;
JTextField txtSurname;
JButton btnAccept;
TableDemo tb  = new TableDemo();

public MyForm(){
    initControls();
}

private void initControls() {
    setTitle("Form Example");
    setSize(600, 400);
    setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    setLocationRelativeTo(null);

    panel = new JPanel();       
    panel.setLayout(null);

    label = new JLabel("Welcome to Swing");
    label.setBounds(50, 10, 200, 30);

    txtName = new JTextField();
    txtName.setBounds(50, 50, 200, 30);

    txtSurname = new JTextField();
    txtSurname.setBounds(270, 50, 200, 30);

    btnAccept = new JButton("Add");
    btnAccept.setBounds(120, 100, 150, 30);

    onAcceptClick();
    TableDemo tablePanel = new TableDemo();

    panel.add(label);
    panel.add(txtName);
    panel.add(txtSurname);
    panel.add(btnAccept);

    JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT,
            tablePanel,panel );
    splitPane.setDividerLocation(205);
    splitPane.setEnabled(false);

    getContentPane().add(splitPane);
}

private void onAcceptClick() {
    btnAccept.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            tb.addRow(new Object[]{"taza",txtName.getText()});

        }
    });
public static void main(String[] args) {
    //Initilizer init = new Initilizer();

    Runnable init = new Runnable() {

        @Override
        public void run() {
            MyForm form = new MyForm();
            form.setVisible(true);
        }
    };

    SwingUtilities.invokeLater(init);   
}
}

正如您所看到的,我调用了addRow函数,但是在JTable中的“永不更新”中,我缺少了什么?丁烯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-08 01:15:50

您正在创建两个TableDemo对象--一个添加到图形用户界面,tablePanel,另一个添加一行,tb;

代码语言:javascript
复制
// ...

TableDemo tb  = new TableDemo();  // TableDemo #1. Never displayed

private void initControls() {
    // ...

    TableDemo tablePanel = new TableDemo();   // TableDemo #2

    // ...

    //  TableDemo #2 is here added to the GUI
    JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, tablePanel,panel );

    // ...
}

btnAccept.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {

        // here you add a row to the non-displayed TableDemo #1
        tb.addRow(new Object[]{"taza",txtName.getText()});
    }
});

解决方案:不要这样做(很明显)!只使用一个TableDemo实例,显示它并对其进行更改。因此,去掉tablePanel变量,只使用tb变量。

其他问题:

  • 你在使用null布局。虽然null布局和setBounds()看起来像是创建复杂GUI的最简单和最好的方法,但是Swing GUI创建的越多,在使用它们时就会遇到更严重的困难。当GUI调整大小时,它们不会调整组件的大小,它们是一个需要增强或维护的皇家女巫,当放置在滚动窗格中时,它们会完全失败,当在所有平台上或屏幕分辨率与原始平台不同时,它们看起来都很糟糕。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36489875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档