Обновление содержимого JTable на основе ActionPerformed - PullRequest
1 голос
/ 05 ноября 2011

Кажется, у меня возникают проблемы с реализацией простой JTable, которая при нажатии кнопки в графическом интерфейсе просто обновляет содержимое таблицы

Пока что мне кажется, что я получаю смешанные представления о том, какой тип таблиц реализовать для этого, но при поиске по нему кажется, что это модель по умолчанию. До сих пор я объявил таблицу

private JTable table;
static Object[] columnNames = new Object[]{"Column 1","Column 2"};
static Object[][] rowData = { {"1", "2"} };    

public TestTables() { 
    DefaultTableModel tableModel; 
    tableModel = new DefaultTableModel(rowData, columnNames);
}

Я даже не уверен, правильно ли я объявил это, но когда я запускаю графический интерфейс, он правильно показывает данные таблицы. Я просто не понимаю, как я могу обновить его, используя выполненное действие

public void actionPerformed(ActionEvent e) {
    if (e.getSource() == X1btn) {
    // not sure how to set table to be {"3", "4"} instead
}

Ответы [ 2 ]

5 голосов
/ 05 ноября 2011

В вашем методе actionPerformed получите ссылку на модель JTable (детали этого будут зависеть от структуры вашей программы - что-то, чего мы не знаем в настоящее время), которая будет DefaultTableModel, и тогда вы можете легко сделать все необходимо сделать с этим объектом, включая добавление строк, удаление строк, изменение значений, содержащихся в ячейках ...

Если вы все еще застряли, рассмотрите возможность создания и публикации минимального скомпилируемого и запускаемого примера, демонстрирующего вашу проблему, sscce .

Например:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;

public class TestTables {
   static Object[] columnNames = new Object[] { "Column 1", "Column 2" };
   static Integer[][] rowData = { {1, 2}, {3, 4} };

   private JPanel mainPanel = new JPanel();
   private DefaultTableModel tableModel = new DefaultTableModel(rowData, columnNames);  
   private JTable table = new JTable(tableModel);   

   public TestTables() {
      JButton timesTwoBtn = new JButton("Multiply By 2");
      timesTwoBtn.addActionListener(new ActionListener() {

         public void actionPerformed(ActionEvent e) {
            for (int row = 0; row < tableModel.getRowCount(); row++) {
               for (int col = 0; col < tableModel.getColumnCount(); col++) {
                  Integer value = (Integer) tableModel.getValueAt(row, col);
                  value *= 2;
                  tableModel.setValueAt(value, row, col);
               }
            }
         }
      });
      JPanel btnPanel = new JPanel();
      btnPanel.add(timesTwoBtn);      


      mainPanel.setLayout(new BorderLayout());
      mainPanel.add(new JScrollPane(table), BorderLayout.CENTER);
      mainPanel.add(btnPanel, BorderLayout.SOUTH);
   }

   public JPanel getMainPanel() {
      return  mainPanel;
   }

   private static void createAndShowGui() {
      TestTables testTables = new TestTables();

      JFrame frame = new JFrame("TableFoo");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(testTables.getMainPanel());
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}
1 голос
/ 05 ноября 2011

создайте метод actionperformed, затем получите модель Jtable.затем сделайте что-нибудь с этой моделью.

public void actionPerformed(ActionEvent e) {
      DefaultTableModel model = (DefaultTableModel)mytable.getModel();
      //do something with the model say add a new row or data to the table
      model.addRow(new Object[]{"new Column1 Data","new Column2 Data"});
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...