2011-05-07 107 views
2

可以说我有一张桌子。其中一个单元格包含JLabel。如果我更改JLabel的文本,我如何让JTable显示更改? 看看下面的代码,我应该改变什么才能使其显示JLabel的更改?更新JTable中的数据

public class ActivTimerFrame extends JFrame implements ActionListener{ 
    //Data for table and Combo Box 
    String timePlay = "1 Hour"; 
    String timeDev = "2 Hours"; 
    String[] comboChoices = {"Play Time", "Dev Time"}; 
    String[] columnNames = {"Activity", "Time Allowed", "Time Left"}; 
    Object[][] data = {{"Play Time", "1 Hour", timePlay }, {"Dev Time", "2 Hours", timeDev }}; 
    //This is where the UI stuff is... 
    JTable table = new JTable(data, columnNames); 
    JScrollPane scrollPane = new JScrollPane(table); 
    JPanel mainPanel = new JPanel(); 
    JComboBox comboBox = new JComboBox(comboChoices); 
    JButton start = new JButton("Start"); 
    JButton stop = new JButton("Stop"); 



    public ActivTimerFrame() { 
     super("Activity Timer"); 
     setSize(655, 255); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setVisible(true); 
     setResizable(false); 
     GridLayout layout = new GridLayout(2,1); 
     setLayout(layout); 
     add(scrollPane); 
     stop.setEnabled(false); 
     start.addActionListener(this); 
     mainPanel.add(comboBox); 
     mainPanel.add(start); 
     mainPanel.add(stop); 

     add(mainPanel); 
    } 



    @Override 
    public void actionPerformed(ActionEvent evt) { 
     Object source = evt.getSource(); 
     if(source == start) { 
      timePlay ="It Works"; 


     } 

    } 



} 
+1

你说的是什么标签?我没有在任何地方看到标签。如果你真的在使用标签,那么不要。您应该只在模型中存储文本,然后让渲染器渲染文本。 – camickr 2011-05-07 02:49:05

回答

4

你需要让你的JTable的TableModel的如AbstractTableModel还是DefaultTableModel,并随后在需要时更改表模型中的数据。如果您还启动了适当的侦听器通知方法(如果使用DefaultTableModel时会自动为您完成),则这将作为JTable中显示的数据的更改反映。 The Swing tutorial on JTables解释了所有这些,如果你没有经历它,你应该这样做。

7

你可以做

table.getModel().setValueAt(cellValueObject, rowIndex, colIndex); 

设置一个特定的细胞。

在你的情况下要尝试什么

,你可以做

 timePlay ="It Works"; 
     table.getModel().setValueAt(timePlay, 0, 1);