0

私はJavaデスクトップアプリケーションを書いています。ユーザーからデータを取得するためのテキストエリアがいくつかあります。A JButton、入力を受け取り、それを処理します。そして、JTable処理されたデータを入力します。

これがメインから呼び出す私のコンストラクターです。

    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 ET\n");

        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();

data は 2 次元配列で、columnames は列です。

しかし、私JTableは更新されていません。

私が間違っているところで、私にいくつかの方向性を教えてください。

4

1 に答える 1

6

現在表示されている JTable には影響しないため、新しい JTable を作成する必要はありません。代わりsetModel(...)に、現在の JTable を呼び出して、新しいテーブル モデルを渡します。

また、率直に言うと臭いので、コードのフォーマットに取り組んでください。あなたはボランティアに助けを求めているので、コードを読むのをそれほど難しくしないように同様の努力をすることをあなたに求めすぎているとは思いません.

例として、上記のコードと次のコードのどちらが読みやすいかを確認してください。

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 ET\n");

      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);
   }
}

次に、レイアウト マネージャーの使用に取り組みます...

于 2012-04-11T12:34:46.830 に答える