Simple use of SWing JTable (column sorting, adding data to JTable)

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);
    }

Guess you like

Origin blog.csdn.net/weixin_42488909/article/details/113850055