Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在JTable上添加复选框?_Java_Swing_Netbeans - Fatal编程技术网

Java 如何在JTable上添加复选框?

Java 如何在JTable上添加复选框?,java,swing,netbeans,Java,Swing,Netbeans,这是一个拖放式Java Swing 这是我的密码 prod.removeColumn(prod.getColumnModel().getColumn(0)); String sql = "select prod_id,prod_description,prod_wh_name,prod_fr_name from product order by prod_description asc"; PreparedStatement pst = con.prepareStatement

这是一个拖放式Java Swing

这是我的密码

prod.removeColumn(prod.getColumnModel().getColumn(0));

    String sql = "select prod_id,prod_description,prod_wh_name,prod_fr_name from product order by prod_description asc";
    PreparedStatement pst = con.prepareStatement(sql);
    ResultSet rs = pst.executeQuery();
    while(rs.next())
    {
        int columns = rs.getMetaData().getColumnCount();
        Object[] row = new Object[columns];
        for(int i = 1 ; i <=columns;i++)
        {
            row[i - 1] = rs.getObject(i);
        }
        ((DefaultTableModel) prod.getModel()).insertRow(rs.getRow() -1,row);
    }
prod.removeColumn(prod.getColumnModel().getColumn(0));
String sql=“按产品描述asc从产品订单中选择产品id、产品描述、产品wh\U名称、产品fr\U名称”;
PreparedStatement pst=con.prepareStatement(sql);
ResultSet rs=pst.executeQuery();
while(rs.next())
{
int columns=rs.getMetaData().getColumnCount();
对象[]行=新对象[列];
对于(inti=1;i,一种方法是创建一个“包装器”表格模型

在此示例中,包含复选标记的列将添加到任何现有TableModel中列的左侧:

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

public class CheckBoxWrapperTableModel extends AbstractTableModel
{
    private ArrayList<Boolean> checkBoxes = new ArrayList<>();

    private DefaultTableModel model;
    private String columnName;

    public CheckBoxWrapperTableModel(DefaultTableModel model, String columnName)
    {
        this.model = model;
        this.columnName = columnName;

        for (int i = 0; i < model.getRowCount(); i++)
            checkBoxes.add( Boolean.FALSE );
    }

    @Override
    public String getColumnName(int column)
    {
        return (column > 0) ? model.getColumnName(column - 1) : columnName;
    }

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

    @Override
    public int getColumnCount()
    {
        return model.getColumnCount() + 1;
    }

    @Override
    public Object getValueAt(int row, int column)
    {
        if (column > 0)
            return model.getValueAt(row, column - 1);
        else
        {
            Object value = checkBoxes.get(row);
            return (value == null) ? Boolean.FALSE : value;
        }
    }

    @Override
    public boolean isCellEditable(int row, int column)
    {
        if (column > 0)
            return model.isCellEditable(row, column - 1);
        else
            return true;
    }

    @Override
    public void setValueAt(Object value, int row, int column)
    {
        if (column > 0)
            model.setValueAt(value, row, column - 1);
        else
        {
            checkBoxes.set(row, (Boolean)value);
        }

        fireTableCellUpdated(row, column);
    }

    @Override
    public Class getColumnClass(int column)
    {
        return (column > 0) ? model.getColumnClass(column - 1) : Boolean.class;
    }

    public void removeRow(int row)
    {
        checkBoxes.remove(row);
        fireTableRowsDeleted(row, row);
        model.removeRow(row);
    }

    private static void createAndShowGUI()
    {
        //  Create the table with check marks in the first column

        DefaultTableModel model = new DefaultTableModel(5, 1);

        for (int i = 0; i < model.getRowCount(); i++)
        {
            model.setValueAt("" + i, i, 0);
        }

        CheckBoxWrapperTableModel wrapperModel = new CheckBoxWrapperTableModel(model, "Select");
        JTable table = new JTable(wrapperModel);

        //  Add button to delete selected rows

        JButton button = new JButton( "Delete Selected Rows" );
        button.addActionListener( new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                for (int i = table.getRowCount() - 1; i >= 0; i--)
                {
                    Boolean selected = (Boolean)table.getValueAt(i, 0);
                    System.out.println(selected + " : " + i);

                    if (selected)
                    {
                        wrapperModel.removeRow(i);
                    }

                }
            }
        });

        JFrame frame = new JFrame("SSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( new JScrollPane( table ) );
        frame.add( button, BorderLayout.PAGE_END );
        frame.pack();
        frame.setLocationByPlatform( true );
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater( () -> createAndShowGUI() );
/*
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowGUI();
            }
        });
*/
    }
}
import java.awt.*;
导入java.awt.event.*;
导入java.util.*;
导入javax.swing.*;
导入javax.swing.table.*;
公共类CheckBoxWrapperTableModel扩展了AbstractTableModel
{
私有ArrayList复选框=新建ArrayList();
私有模型;
私有字符串列名;
public CheckBoxWrapperTableModel(DefaultTableModel模型,字符串columnName)
{
this.model=模型;
this.columnName=columnName;
对于(int i=0;i0)?model.getColumnName(列-1):columnName;
}
@凌驾
public int getRowCount()
{
返回model.getRowCount();
}
@凌驾
public int getColumnCount()
{
返回model.getColumnCount()+1;
}
@凌驾
公共对象getValueAt(int行,int列)
{
如果(列>0)
返回model.getValueAt(行,列-1);
其他的
{
对象值=复选框。获取(行);
返回值(值==null)?Boolean.FALSE:值;
}
}
@凌驾
公共布尔值可编辑(int行,int列)
{
如果(列>0)
返回模型.isCellEditable(行,列-1);
其他的
返回true;
}
@凌驾
public void setValueAt(对象值,int行,int列)
{
如果(列>0)
model.setValueAt(值,行,列-1);
其他的
{
复选框。设置(行,(布尔)值);
}
fireTableCellUpdated(行、列);
}
@凌驾
公共类getColumnClass(int列)
{
return(column>0)?model.getColumnClass(column-1):Boolean.class;
}
公共无效清除器OW(int行)
{
复选框。删除(行);
fireTableRowsDeleted(行,行);
模型。移除器(世界其他地区);
}
私有静态void createAndShowGUI()
{
//在第一列中创建带有复选标记的表
DefaultTableModel=新的DefaultTableModel(5,1);
对于(int i=0;i=0;i--)
{
所选布尔=(布尔)表.getValueAt(i,0);
System.out.println(选中+“:”+i);
如果(选定)
{
包装器模型.拆卸器(i);
}
}
}
});
JFrame=新JFrame(“SSCCE”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(新的JScrollPane(表));
frame.add(按钮,BorderLayout.PAGE_END);
frame.pack();
frame.setLocationByPlatform(真);
frame.setVisible(true);
}
公共静态void main(字符串[]args)
{
invokeLater(()->createAndShowGUI());
/*
invokeLater(新的Runnable()
{
公开募捐
{
createAndShowGUI();
}
});
*/
}
}

这允许您添加复选框,即使您在创建原始TableModel时无法访问该复选框以添加您自己的复选框列。

我建议从开始,或者进行一些搜索,可能会将示例变成或,然后我会尝试一些我会尝试您的建议。谢谢!欢迎使用。我建议删除e
mysql
tag,它与问题无关。@c0der已编辑。谢谢!我将尝试学习此包装器内容。谢谢!还有一个问题,我可以使用此包装器内容获取原始表上的产品id之类的数据吗?