2012-04-11 110 views
0

我正在寫java桌面應用程序。我有一些textareas從用戶獲取數據。 A JButton,它接受輸入並處理它。並填入JTable來處理數據。JTable和JButton

這裏是我的主要構造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 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是2d數組,而columnames是列。

但我的心不是JTable獲取更新。

我哪裏做錯了,請給我一些指導。

回答

6

你不希望創建一個新的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 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); 
    } 
} 

下一步,我們將使用上的佈局管理器的工作...

+0

感謝對於建議先生。它:) – 2012-04-11 12:39:42

+0

下一次工作,我會考慮烏爾建議先生 問候 賽伊爾A.卡特里 – 2012-04-11 12:41:27

+0

@Saghir:歡迎您,並感謝未來的討論。 – 2012-04-11 12:42:48