2015-02-04 3 views
0

Я новичок в Java. Теперь я реализую эту небольшую программу. Он имеет кнопку и таблицу с некоторой случайной информацией. Когда я нажимаю кнопку, он обновляет содержимое таблицы.Как обновить содержимое JPanel?

public class GUI extends JFrame{ 

private Container pane; 
private JPanel topBar; 
private JScrollPane tablePane; 
private JButton repaint; 
private JTable a,b; 
private String[] columnNames = {"Name", 
      "Age", 
      "Major"}; 

public GUI(){ 
    pane = getContentPane(); 
    setLayout(new BorderLayout()); 
    Handler h = new Handler(); 
    //Create the button 
    repaint = new JButton("Repaint"); 
    repaint.addActionListener(h); 
    //the original table content 
    String [][] data = { { "a", "a", "a"}, 
        { "b", "b", "b"}, 
        { "c", "c", "c" }}; 
    a = new JTable(data, columnNames); 
    tablePane = new JScrollPane(a); 

    pane.add(repaint,BorderLayout.NORTH); 
    pane.add(tablePane,BorderLayout.SOUTH); 
} 
private class Handler implements ActionListener { 
    public void actionPerformed(ActionEvent event){ 
     //update the table content 
     String [][] data = { { "f", "f", "f"}, 
        { "e", "e", "e"}, 
        { "z", "z", "z" }}; 
     b = new JTable(data, columnNames); 
     tablePane = new JScrollPane(b); 
     pane.add(tablePane,BorderLayout.SOUTH); 
    } 
} 
} 

Теперь программа не работает. Содержимое таблицы не изменяется. Не могли бы вы рассказать мне, как это сделать? Я слышал о методе repaint(). Должен ли я использовать этот метод?

Большое спасибо

ответ

2

Не создавать новый экземпляр JTable, просто изменить модель уже существующей таблицы ...

private class Handler implements ActionListener { 
    public void actionPerformed(ActionEvent event){ 
     //update the table content 
     String [][] data = { { "f", "f", "f"}, 
        { "e", "e", "e"}, 
        { "z", "z", "z" }}; 
     a.setModel(new DefaultTableModel(data, columnNames)); 
    } 
} 

Взгляните на How to Use Tables для получения более подробной информации , Вам также может быть полезно прочитать Model-View-Controller, что даст лучшее представление об основных помещениях, на которых построен Swing.

Вы также должны взглянуть на Initial Threads и убедитесь, что вы создаете/модифицируя интерфейс только в Event Диспетчерская Thread

public GUI(){ 
    EventQueue.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      pane = getContentPane(); 
      setLayout(new BorderLayout()); 
      Handler h = new Handler(); 
      //Create the button 
      repaint = new JButton("Repaint"); 
      repaint.addActionListener(h); 
      //the original table content 
      String [][] data = { { "a", "a", "a"}, 
          { "b", "b", "b"}, 
          { "c", "c", "c" }}; 
      a = new JTable(data, columnNames); 
      tablePane = new JScrollPane(a); 

      pane.add(repaint,BorderLayout.NORTH); 
      pane.add(tablePane,BorderLayout.SOUTH); 
     } 
    }); 
} 
+0

Спасибо так много! Я прочту эти документы! –

+0

Рад, что это помогло ... – MadProgrammer

Смежные вопросы