JTable and JButton



我正在编写Java桌面应用程序。 我有一些文本区域可以从用户那里获取数据。一个JButton,它接受输入并处理它。以及用于填充已处理数据的JTable

这是我从主调用的构造函数 em。

    public ChangeButtonLabel()
    {
        JFrame f=new JFrame();
            f.setLayout(null);
        JLabel lab1=new JLabel("Name");
            JLabel lab2=new JLabel("Age");
        //table=new JTable(model);
        text1=new JTextField(20);
            text2=new JTextField(20);

        button=new JButton("OK");
            lab1.setBounds(10,10,100,20);
            text1.setBounds(120,10,100,20);
            lab2.setBounds(10,40,100,20);
            text2.setBounds(120,40,100,20);
            Table=new ArrayList();
        Table.add(new ArrayList());
        ((ArrayList)Table.get(0)).add("nProgram Name   ");
        ((ArrayList)Table.get(0)).add("Count   ");
        ((ArrayList)Table.get(0)).add("Elapsed Time   ");
        ((ArrayList)Table.get(0)).add("Average ETn");
        button.setBounds(120, 100, 100, 20);        
        button.addActionListener(new MyAction());
            Object[][] data = {
                {"Program Name","count","ET","Avg ET"}
            };

        model = new DefaultTableModel(data,columnNames);
            dataTable = new JTable(model);
            dataTable.setPreferredScrollableViewportSize(new Dimension(500, 70));
            dataTable.setFillsViewportHeight(true);
        dataTable.setBounds(220,130,300,200);
            f.add(lab1);
            f.add(text1);
            f.add(lab2);
            f.add(text2);
        f.add(dataTable);
        f.add(button);
            f.setVisible(true);
            f.setSize(300,350);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
    }
}

在事件中,我正在尝试通过删除其以前的值来更新整个 jtable。 这是代码

model = new DefaultTableModel(data,columnNames);
dataTable.repaint();
dataTable=new JTable(model);
    dataTable.setPreferredScrollableViewportSize(new Dimension(500, 70));
    dataTable.setFillsViewportHeight(true);
dataTable.setBounds(220,130,300,200);
model.fireTableDataChanged();

其中数据是二维数组,列是列。

但是我的JTable没有得到更新。

我做错的地方,请给我一些方向。

您不想创建新的 JTable,因为这对当前显示的 JTable 没有影响。相反,您希望在当前 JTable 上调用 setModel(...) 并传入新的表模型。

另外,请处理您的代码格式,因为坦率地说,它很臭。既然你要求志愿者付出努力来帮助你,我认为你付出类似的努力,不要让你阅读代码变得如此困难,这并不过分。

举个例子,检查一下哪个更容易阅读,上面的代码,或者这个代码:

public class ChangeButtonLabel {
   private JTextField text1;
   private JButton button;
   private ArrayList Table;
   private JTextField text2;
   private Object[] columnNames;
   private DefaultTableModel model;
   private JTable dataTable;
   public ChangeButtonLabel() {
      JFrame f = new JFrame();
      f.setLayout(null);
      JLabel lab1 = new JLabel("Name");
      JLabel lab2 = new JLabel("Age");
      // table=new JTable(model);
      text1 = new JTextField(20);
      text2 = new JTextField(20);
      button = new JButton("OK");
      lab1.setBounds(10, 10, 100, 20);
      text1.setBounds(120, 10, 100, 20);
      lab2.setBounds(10, 40, 100, 20);
      text2.setBounds(120, 40, 100, 20);
      Table = new ArrayList();
      Table.add(new ArrayList());
      ((ArrayList) Table.get(0)).add("nProgram Name   ");
      ((ArrayList) Table.get(0)).add("Count   ");
      ((ArrayList) Table.get(0)).add("Elapsed Time   ");
      ((ArrayList) Table.get(0)).add("Average ETn");
      button.setBounds(120, 100, 100, 20);
      button.addActionListener(new MyAction());
      Object[][] data = { { "Program Name", "count", "ET", "Avg ET" } };
      model = new DefaultTableModel(data, columnNames);
      dataTable = new JTable(model);
      dataTable.setPreferredScrollableViewportSize(new Dimension(500, 70));
      dataTable.setFillsViewportHeight(true);
      dataTable.setBounds(220, 130, 300, 200);
      f.add(lab1);
      f.add(text1);
      f.add(lab2);
      f.add(text2);
      f.add(dataTable);
      f.add(button);
      f.setVisible(true);
      f.setSize(300, 350);
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   }
}

接下来,我们将介绍如何使用布局管理器...

最新更新