我正在使用DefaultTableModel,如下所示:
DefaultTableModel model = new DefaultTableModel (COLUMNS, 0 )
{
@Override
public boolean isCellEditable(int row, int column)
{
return (getColumnName(column).equals("Selected"));
}
public Class getColumnClass(int columnIndex)
{
if(getColumnName(columnIndex).equals("Selected"))
return Boolean.class;
return super.getColumnClass(columnIndex);
}
};
现在我想在“Selected”列中仅使一个复选框可选。这怎么能做到。我也试过下面的方法,但它不起作用。
public void fireTableCellUpdated(int row,int column)
{
if(getColumnName(column).equals("Selected"))
{
for(int i = 0; i<getRowCount() && i!=row;i++)
setValueAt(Boolean.FALSE, row, column);
}
}
>
@EatSleepCode编写了@Mkorbel,请给出实现setValueAt方法的示例代码。
(OP已使用)DefaultTableModel的代码,
对于基于AbstractTableModel
的代码,需要保留通知程序FireTableCellUpdated(rowIndex,columnIndex)
的代码排序,因为/否则在JTables视图
中不会重新绘制任何内容,
这两个模型和它的通知程序之间有一些重要的区别,而且(我的观点)没有理由为基本的东西(99pct的表模型)而烦恼和使用abstracttablemodel
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
public class TableRolloverDemo {
private JFrame frame = new JFrame("TableRolloverDemo");
private JTable table = new JTable();
private String[] columnNames = new String[]{"Column"};
private Object[][] data = new Object[][]{{false}, {false}, {true}, {true},
{false}, {false}, {true}, {true}, {false}, {false}, {true}, {true}};
public TableRolloverDemo() {
final DefaultTableModel model = new DefaultTableModel(data, columnNames) {
private boolean ImInLoop = false;
@Override
public Class<?> getColumnClass(int columnIndex) {
return Boolean.class;
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return true;
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
if (columnIndex == 0) {
if (!ImInLoop) {
ImInLoop = true;
Boolean bol = (Boolean) aValue;
super.setValueAt(aValue, rowIndex, columnIndex);
for (int i = 0; i < this.getRowCount(); i++) {
if (i != rowIndex) {
super.setValueAt(!bol, i, columnIndex);
}
}
ImInLoop = false;
}
} else {
super.setValueAt(aValue, rowIndex, columnIndex);
}
}
};
table.setModel(model);
table.setPreferredScrollableViewportSize(table.getPreferredSize());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JScrollPane(table));
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
TableRolloverDemo tableRolloverDemo = new TableRolloverDemo();
}
});
}
}
问题内容: 我不知道该怎么办,我有这个框架,我想填充一个JTable并添加一个复选框。 问题答案: 我假设您是要添加数据库中未包含的其他列的复选框,以便可以选择行? 如果是这样,则可以使用包装器TableModel。 以下示例可能会有所帮助: 如果该模型有效,那么您可以使用以下代码为我们提供模型:
这个类创建一个有6列的jtable,最后一列包含布尔复选框。我在getColumnClass中指定了它。我不能取消选中/选中这些框,它们是不可编辑的。我怀疑MyTableModel类中的setValueAt和getValueAt方法不正确,但我无法理解。请帮帮忙。这里有3个我要展示的类:带有main方法的gui类,扩展AbstractTableModel的MyTableModel和cell ren
我正在将一些代码移动到java8,试图(有时强迫自己)使用流和lambdas,但我对它们还不舒服。 我在类中有一些验证业务对象的方法。每个方法看起来都像 Fail是以某种方式描述错误的枚举,如果没有错误,则方法返回Optional.empty()。我不需要收集所有错误,但返回第一个错误,而无需执行以下验证。 我现在做的是 它工作,它完成任务,它不执行不必要的方法,它清晰易读(如果可选,它会更清晰。
我一直在研究这个问题,但我找不到一个带有复选框的get drawable的解决方案。我试图做的是,当你点击这个特定的复选框时,它会过滤相应颜色的复选框。顺便说一下,这是一个片段。所以,我有可以是红色、黄色或绿色的复选框。如果用户点击它们,它会改变颜色。例如,我有一个黄色的复选框,它是chkProgress,当它被单击时,我想找到所有黄色的复选框,并筛选黄色的复选框。所以,我有可绘制的ID,我需要得
我有一个自定义复选框。我想要的是在选中复选框时打开一个引导模式。我想要一个引导模式打开就像点击一个按钮一样。希望你能理解我的问题。我怎么能做到。
我正在使用React、GraphQL、Apollo创建多个可选复选框。 如果选中,我想进行查询,插入查询和取消选中,删除查询(我只想为选中/删除的项目生成查询) 现在我正在使用变异技术,但我有一个问题,所有的东西都被删除,然后被插入。 我只想为选定/删除的项目生成查询。如何修复它? 我的代码如下。 const handleCollection=(名称:string,arr:Array)= 突变更新