当前位置: 首页 > 面试题库 >

如何在使用rs2xml填充的Jtable中添加复选框

戎桐
2023-03-14
问题内容

我不知道该怎么办,我有这个框架,我想填充一个JTable并添加一个复选框。

public static void update_table() {

        try {

        String sql="SELECT * FROM equipments";
        PreparedStatement update = con.prepareStatement(sql);
        ResultSet result = update.executeQuery();
        table.setModel(DbUtils.resultSetToTableModel(result));
        table.setVisible(true);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

问题答案:

我假设您是要添加数据库中未包含的其他列的复选框,以便可以选择行?

如果是这样,则可以使用包装器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();
            }
        });
*/
    }
}

如果该模型有效,那么您可以使用以下代码为我们提供模型:

//table.setModel(DbUtils.resultSetToTableModel(result));
TableModel utilsModel = DbUtils.resultSetToTableModel(result);
TableModel wrapperModel = new CheckBoxWrapperTableModel(utilsModel, "Select");
table.setModel( wrapperModel );


 类似资料:
  • 问题内容: 我想使用css在html中的选择选项之间添加某种空间(填充,边距或其他)。我已经尝试使用类似的东西: 但是没有用。我已经读过,这是可以做到的,但在IE中不起作用。无论如何,即使它无法在IE中运行,我也希望它可以在其他浏览器中运行。 PS:当前正在使用Chrome 问题答案: 选择选项的样式非常有限,因为要在操作系统中的所有应用程序之间保持一致性和一致性,因此浏览器应限制某些基本元素的样

  • 问题内容: 如何用对象类型的列表中的值填充JTable。我的代码如下所示: 我已经有了列,列表将来自schedule变量?考虑这些列,如何将其放到表中? 问题答案: 看一下DefaultTableModel。您可以遍历List并为每一行创建Object数组。

  • 问题内容: 您知道如何将新行添加到吗? 问题答案: 的后面处理表后面的所有数据。为了在表格中添加和删除行,您需要使用 要使用此模型创建表: 要添加一行: 您也可以使用此方法删除行。

  • 问题内容: 首先,我为我的英语疏忽表示歉意,我将解释我所有的问题。 首先我要在JTable中拥有JCheckBox。 我正在从列索引0和1的数据库中检索学生ID和学生姓名。我希望第三列应该是“缺席/在场”,这将首先根据JCheckbox值来获取学生是否在场。 这是我的JTable值代码: Attendance.java 此代码可从数据库中获取值,并将其保存到矢量中 AttendanceGUI.ja

  • 我有一些代码,使用POI输出一个excel文件,我想有它,这样我的行高有一点更多的空间比自动高度设置,如果我什么都不做。 目前,我使用获得一行,然后我根本不设置高度,excel/POI似乎只负责处理这一点。 我现在想向自动设置的高度添加一个缓冲区(例如20px),但我找不到这样做的方法,当我添加单元格时,它似乎实际上并没有自动设置行的height属性,所以我不能执行,因为getHeight只返回默

  • 作为一项任务,我被要求制作一个Swing GUI。在第一部分中,我创建了一个()对象()。目前所需要的是对所述数组列表进行排序,并将其显示为GUI中的。我制作了一个,当按下它时,它应该进行排序和显示。 但是,一旦按下它将只显示表标题而不显示数组列表中的信息,我应该做什么不同的事情呢?我已经在下面包括了GUI类和main类。