有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java删除JTable行

我正在研究jTable,我打算删除特定的行,作为对表进行数据操作的一部分。基本上,我已经能够成功地删除用户指定的一行,但我真正想做的是根据布尔状态或复选框删除几行,这些状态或复选框被选为表的四列中的第一部分

我已经附上了一个屏幕截图,显示了运行代码的当前结果,希望能够根据所选的布尔状态或复选框删除行

下面是我的代码,包括扩展AbstractTableModel的表模型代码:

package com.TableRowSelectProgramatically;

import javax.swing.*;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

@SuppressWarnings("serial")
public class JTableRowSelectProgramatically extends JPanel {

    public MyTableModel MyTableModel;

    public String Cell1 = "ABCD";

    public JTableRowSelectProgramatically() {
        initializePanel();
    }

    private void initializePanel() {

        setLayout(null);
        setPreferredSize(new Dimension(1250, 700));

        // Table model
        MyTableModel = new MyTableModel();

        // Table
        final JTable table = new JTable(MyTableModel);
        table.setFillsViewportHeight(true);

        // Row data
        Object[] values = {Cell1, "EFGH", "IJKL", new Boolean(false)};
        Object[] values2 = {"UVWX","QRST","MNOP", new Boolean(false)};
        Object[] values3 = {"ABCD","YZAB","CDEF", new Boolean(false)};
        final Object[] values4 = {"QWERTY","YTREWQ","QWERTY", new Boolean(false)};

        // Insert row data
        MyTableModel CustomTableModel = (MyTableModel) table.getModel();
        CustomTableModel.insertData(values);
        CustomTableModel.insertData(values2);
        CustomTableModel.insertData(values3);
        CustomTableModel.insertData(values);
        CustomTableModel.insertData(values2);
        CustomTableModel.insertData(values3);
        CustomTableModel.insertData(values);
        CustomTableModel.insertData(values2);
        CustomTableModel.insertData(values3);

        // Create edit menu label
        JLabel labelEditMenu = new JLabel("EDIT MENU:\n");

        // Create add row btn
        JButton addRow = new JButton("Add Row");

        // Attach listener for add row btn
        addRow.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                MyTableModel.insertData(values4);
            }
        });

        // Create delete row btn
        JButton deleteRow = new JButton("Delete Row");

        // Attach listener for delete btn
        deleteRow.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                MyTableModel.removeRow(1);
            }
        });

        // Create scroll pane
        JScrollPane pane = new JScrollPane(table);
        pane.setBounds(30, 30, 500, 500);

        // 
        JTextField AgentIDTextField = new JTextField();

        // Populate the JPanel
        JPanel dataEntryPanel = new JPanel(new FlowLayout());
        //dataEntryPanel.setBackground(Color.orange);
        dataEntryPanel.setBounds(540, 30, 500, 50);
        //dataEntryPanel.add(AgentIDTextField);
        dataEntryPanel.add(labelEditMenu);
        dataEntryPanel.add(addRow);
        dataEntryPanel.add(deleteRow);

        // Join up GUI
        add(pane);
        add(dataEntryPanel);
    }

    // Enable visibity of frame
    public static void showFrame() {
        JPanel panel = new JTableRowSelectProgramatically();

        JFrame frame = new JFrame("Test table");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setContentPane(panel);
        frame.pack();
        frame.setVisible(true);
    }

    // Launch prog
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JTableRowSelectProgramatically.showFrame();
            }
        });
    }

    // Create custom table model for data entry
    class MyTableModel extends AbstractTableModel {

         private String[] columnNames = {"COLUMN 0", "COLUMN 1", "COLUMN 2", "COLUMN 3"};
         private Vector data = new Vector();

         @Override
         public int getRowCount() {
            return data.size();
         }

         @Override
         public int getColumnCount() {
             return columnNames.length;
         }

         @SuppressWarnings("rawtypes")
        @Override
         public Object getValueAt(int row, int col) {
             return ((Vector) data.get(row)).get(col);
         }

         public String getColumnName(int col){
             return columnNames[col];
         }

         public Class getColumnClass(int c){
             return getValueAt(0,c).getClass();
         }

         public void setValueAt(Object value, int row, int col){
             ((Vector) data.get(row)).setElementAt(value, col);
             fireTableCellUpdated(row,col);
         }

         public boolean isCellEditable(int row, int col){
             if (3 == col){
                 return true;
             }
             else {
                return false;
             }
         }

         public void insertData(Object[] values){
             data.add(new Vector());

             for(int i =0; i<values.length; i++){

                 System.out.println("data.size is: " + data.size());
                 ((Vector) data.get(data.size()-1)).add(values[i]);
             }

             fireTableDataChanged();
         }

         public void removeRow(int row){
             data.removeElementAt(row);
             fireTableDataChanged();
         }
     }
}

删除JTable行的新尝试:

 public void deleteRow() {
 for (int i = 0; i < getRowCount(); i++) {

     Object columnState = getValueAt(i, 3);

     System.out.println("STEP 6 - In row " + i + " boolean value is: " + columnState);

     boolean columnStateAsBoolean = (Boolean) columnState;

     System.out.println("STEP 6 - In row " + i + " Column State As Boolean is: " + columnStateAsBoolean);

     if(columnStateAsBoolean == true) {
         removeRow(i);                   
     }

     System.out.println("-------------------------------------");
 }

}


共 (2) 个答案

  1. # 1 楼答案

    //试试这样

        int rowCount=table.getSelectedRowCount();//get selected row's count
        int row;
        if(rowCount>0)
        {
           while((row=table.getSelectedRow())!=-1)
            (DefaultTableModel)table.getModel().removeRow(table.convertRowIndexToModel(row));
    
        }
    
  2. # 2 楼答案

    I really want to do is to delete several rows based on boolean states or check boxes

    创建一个循环,从最后一行开始,倒计时到0

    然后,对于每一行,您都使用该表。getValueAt(…)方法获取列的布尔值

    如果该值为true,则删除该行