code show as below:
package swing;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.RowSorter;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
public class JTable_Test {
public static void main(String[] args) {
jTable();
}
public static void jTable() {
JFrame frame = new JFrame("JTable的使用例子");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new BorderLayout());
panel.setPreferredSize(new Dimension(200, 200));
panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.GRAY)) ));
// The data displayed in the table
//, {"Zhao Zilong", "West Shu", 1234 },
Object[][] rows = null;
rows = new Object[][] {{"王明", "China"}, {"Yao Ming", "China"}, {"Cao Cao", "Northern Wei Dynasty"} }; // Add more data and the drop-down bar will come out
String columns[] = {"Name", "Nationality"};
TableModel model = new DefaultTableModel(rows, columns) { /** * */ private static final long serialVersionUID = 1L; // Override method to make the cell uneditable public boolean isCellEditable(int row, int column) { return false; } }; JTable table = new JTable(model); RowSorter<TableModel> sorter = new TableRowSorter<TableModel> (model); table.setRowSorter(sorter); table. setPreferredScrollableViewportSize(new Dimension(150, 150)); // Set the header column cannot be dragged
table.getTableHeader().setReorderingAllowed(false);
JScrollPane spane = new JScrollPane(table);
spane.setPreferredSize(new Dimension(150, 150));
panel.add(spane, BorderLayout.CENTER);
frame.add(panel);
frame.setSize(300, 300);
frame.setVisible(true);
}
}
Operation result 1:
But there is a problem here. Is the data in JTable uncertain, or what should I do if JTable needs to add new data? The following code can solve such a problem.
code show as below:
public static void jTable_DataIsNotCertain() { JFrame frame = new JFrame("JTable usage example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new BorderLayout());
panel.setPreferredSize(new Dimension(200, 200));
panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.GRAY)) ));
String columns[] = {"Item", "Check result"};
// The following is different, the defined objects are different
DefaultTableModel model = new DefaultTableModel(null, columns) { /** * */ private static final long serialVersionUID = 1L; // Override the method to make the cell uneditable public boolean isCellEditable(int row, int column) { return false;
}
};
String[] rowData = new String[3];
JTable table = new JTable(model);
// In this way, we can add new data to the Table
rowData[0] = "a"; //rowData[ 0] is the column number, starting from 0, the value of the first column is a
rowData[1] = "b";
model.addRow(rowData);
rowData[0] = "aa";
rowData[1] = "bb" ;
model.addRow(rowData);
RowSorter<TableModel> sorter = new TableRowSorter<TableModel> (model);
table.setRowSorter(sorter);
table.setPreferredScrollableViewportSize(new Dimension(150, 150));
table.getTableHeader().setReorderingAllowed (false);
JScrollPane spane = new JScrollPane(table);
spane.setPreferredSize(new Dimension(150, 150));
panel.add(spane, BorderLayout.CENTER);
// 让panel重绘
panel.revalidate();
panel.repaint();
frame.add(panel);
frame.setSize(300, 300);
frame.setVisible(true);
}