JTable with TableModel |
package javamyframe; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Dimension; import java.awt.Label; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BoxLayout; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.SwingUtilities; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.AbstractTableModel; /** * @web http://java-buddy.blogspot.com/ */ public class JavaMyFrame extends JFrame { Label labelInfo; JTable jTable; public static void main(String[] args) { SwingUtilities.invokeLater(() -> { createAndShowGUI(); }); } private static void createAndShowGUI() { JavaMyFrame myFrame = new JavaMyFrame(); myFrame.setTitle("java-buddy.blogspot.com"); myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); myFrame.prepareUI(); myFrame.pack(); myFrame.setVisible(true); } private void prepareUI(){ JPanel vPanel = new JPanel(); vPanel.setLayout(new BoxLayout(vPanel, BoxLayout.Y_AXIS)); jTable = new JTable(new MyTableModel()); jTable.getSelectionModel() .addListSelectionListener(new MyRowListener()); jTable.getColumnModel().getSelectionModel() .addListSelectionListener(new MyColListener()); jTable.setFillsViewportHeight(true); JScrollPane jScrollPane = new JScrollPane(jTable); jScrollPane.setPreferredSize(new Dimension(450, 100)); vPanel.add(jScrollPane); labelInfo = new Label(); vPanel.add(labelInfo); Button buttonPrintAll = new Button("Print All"); buttonPrintAll.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { System.out.println(); for(int i=0; i<jTable.getRowCount(); i++){ for(int j=0; j<jTable.getColumnCount(); j++){ String val = String.valueOf(jTable.getValueAt(i, j)); System.out.print(val + "\t"); } System.out.println(); } } }); getContentPane().add(vPanel, BorderLayout.CENTER); getContentPane().add(buttonPrintAll, BorderLayout.PAGE_END); } private class MyRowListener implements ListSelectionListener { @Override public void valueChanged(ListSelectionEvent e) { if (!e.getValueIsAdjusting()) { System.out.println("valueChanged: " + e.toString()); int row = jTable.getSelectedRow(); int col = jTable.getSelectedColumn(); /* // cannot access getValueAt(row, col) here...! // Otherwise ArrayIndexOutOfBoundsException when move column int selectedItem = (int)jTable.getValueAt(row, col); labelInfo.setText("MyRowListener: " + row + " : " + col + " = " + selectedItem); */ labelInfo.setText("MyRowListener: " + row + " : " + col); } } } private class MyColListener implements ListSelectionListener { @Override public void valueChanged(ListSelectionEvent e) { if (!e.getValueIsAdjusting()) { System.out.println("valueChanged: " + e.toString()); int row = jTable.getSelectedRow(); int col = jTable.getSelectedColumn(); /* // cannot access getValueAt(row, col) here...! // Otherwise ArrayIndexOutOfBoundsException when move column int selectedItem = (int)jTable.getValueAt(row, col); labelInfo.setText("MyColListener: " + row + " : " + col + " = " + selectedItem); */ labelInfo.setText("MyRowListener: " + row + " : " + col); } } } class MyTableModel extends AbstractTableModel { private String[] DayOfWeek = { "Monday", "Tuesday", "Wednesday", "Thursday"}; private Object[][] tableData = { {1, 2, 3, 4}, {4, 3, 2, 1}, {12, 20, 13, 14}, {13, 29, 23, 24}, {2, 4, 6, 8}, {11, 21, 33, 4}}; @Override public int getColumnCount() { return DayOfWeek.length; } @Override public int getRowCount() { return tableData.length; } @Override public String getColumnName(int col) { return DayOfWeek[col]; } @Override public Object getValueAt(int row, int col) { return tableData[row][col]; } @Override public Class getColumnClass(int c) { return getValueAt(0, c).getClass(); } @Override public boolean isCellEditable(int row, int col) { return true; } @Override public void setValueAt(Object value, int row, int col) { tableData[row][col] = value; fireTableCellUpdated(row, col); } } }
More:
- Display JTable data in line chart using JComponent