这个类创建一个有6列的jtable,最后一列包含布尔复选框。我在getColumnClass中指定了它。我不能取消选中/选中这些框,它们是不可编辑的。我怀疑MyTableModel类中的setValueAt和getValueAt方法不正确,但我无法理解。请帮帮忙。这里有3个我要展示的类:带有main方法的gui类,扩展AbstractTableModel的MyTableModel和cell renderer类ColorRenderer。
import java.awt.Color;
import java.awt.Component;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumnModel;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
public class table extends JFrame {
JTable table = new JTable();
MyTableModel model = new MyTableModel(getDummyData());
JScrollPane scroll;
List<Integer> highlightedCell;
public table() throws FileNotFoundException, IOException, InvalidFormatException {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
public Vector getDummyData() throws IOException, InvalidFormatException {
highlightedCell = new ArrayList<Integer>();
String nnnname;
Vector vector;
Vector vectorOfVector = new Vector();
excelToList e = new excelToList("input.xls");
List<Person> names = e.createWorkbook();
int rowNum = 0;
for (Person p : names) {
nnnname = p.getName();
vector = new Vector();
vector.add(nnnname);
vector.add(p.getDone());
vector.add(p.getWaiting());
vector.add(p.getORDERED());
vector.add(p.getKPR1());
vector.add(new Boolean(false));
vectorOfVector.add(vector);
rowNum++;
if ((nnnname.matches("\\A\\p{ASCII}*\\z"))) {
highlightedCell.add(rowNum - 1);
}
}
return vectorOfVector;
}
public void createTable() throws FileNotFoundException, IOException, InvalidFormatException {
table.setModel(model);
table.setFillsViewportHeight(true);
TableCellRenderer original = table.getDefaultRenderer(Object.class);
table.setDefaultRenderer(Object.class,
new ColorRenderer(highlightedCell, original));
scroll = new JScrollPane(table);
add(scroll);
setSize(1000, 1000);
}
public static void main(String args[]) throws FileNotFoundException, IOException, InvalidFormatException {
table t = new table();
t.createTable();
}
}
class MyTableModel extends AbstractTableModel {
private String[] columnName = {"NAME", "DONE", "WAITING",
"OVERALL", "PERCENTAGE 1", "PERCENTAGE 2"};
private Vector dataVector;
public MyTableModel(Vector vectorOfVector) throws IOException, InvalidFormatException {
dataVector = vectorOfVector;
}
public int getRowCount() {
return dataVector.size();
}
public int getColumnCount() {
return columnName.length;
}
Vector v;
public Object getValueAt(int i, int i1) {
v = (Vector) dataVector.elementAt(i);
return v.elementAt(i1);
}
@Override
public Class getColumnClass(int c) {
switch (c) {
case 5:
return Boolean.class;
default:
return String.class;
}
}
@Override
public boolean isCellEditable(int row, int col) {
if (col < 1) {
return true;
} else {
return false;
}
}
@Override
public void setValueAt(Object value, int row, int col) {
Vector rowVector = (Vector) dataVector.get(row);
rowVector.set(col, value);
fireTableCellUpdated(row, col);
}
}
class ColorRenderer implements TableCellRenderer {
List<Integer> highlightedCoordinates;
private TableCellRenderer cellRenderer;
public ColorRenderer(List<Integer> list, TableCellRenderer cellRenderer) {
if (cellRenderer == this || cellRenderer == null) {
throw new IllegalArgumentException();
}
this.cellRenderer = cellRenderer;
highlightedCoordinates = list;
}
public Component getTableCellRendererComponent(JTable jtable, Object color,
boolean isSelected, boolean hasFocus, int row, int column) {
Component c;
c = cellRenderer.getTableCellRendererComponent(jtable, color, hasFocus, hasFocus, row, row);
if (column == 0 && highlightedCoordinates.contains(row)) {
c.setBackground(Color.GREEN);
} else {
c.setBackground(Color.yellow);
}
return c;
}
}
将你的是可编辑的(整行,整行)
改为对以下内容:
public boolean isCellEditable(int row, int col) {
if (col < 1) {
return true;
} else if( col == 5){//column with your checkboxes.
return true;
} else {
return false;
}
}
public boolean isCellEditable(int row, int col) {
if (col < 1) {
return true;
} else {
return false;
}
}
如果我的理解是正确的,你试图只设置第0列为可编辑。添加复选框的列索引以返回true。
我正在为listview的每个Iten使用listview实现复选框。我遇到的问题是,当我点击任何一个复选框时,当我滚动时,其他一些没有点击的复选框也会被随机点击。我在SO上通过了许多链接,但它并没有解决我的问题。 我的xml文件是
我有几个复选框。基于JSON响应(通过ajax-requests加载数据),我使用.prop()函数设置和重置复选框的默认值。问题是,如果我手动改变它们,它们显然不会改变这种行为。我不能通过$('#checkbox:checked').val()传递复选框的值,控制台日志显示为'undefined'。这是因为.prop()函数吗?如何获取选中复选框的值? 如果你需要更多的信息,我很乐意提供。这里有
我试图创建一个表单,该表单顶部有一个复选框,当用户选中该复选框时,它会选择其他特定的复选框,但不是所有复选框。我很难通过反复试验或搜索找到答案。我唯一能找到的就是“全选”选项。不是我想要的。 理想情况下,当用户选中“管理包”旁边的复选框时,我想要“Chrome外观组”和“远程启动” 下面是代码和我在这方面的基本尝试,但它不起作用。提前谢谢。 超文本标记语言: Javascript 我不知道这个Ja
我正在使用DefaultTableModel,如下所示: 现在我想在“Selected”列中仅使一个复选框可选。这怎么能做到。我也试过下面的方法,但它不起作用。
我对Nattable是新的。我已经彻底的NatTable例子和它的源代码,但没有得到一个解决我的问题。在NatTable中,我有一个列,它应该提供一个复选框,根据另一列的值进行选择。我使用过Checkboxpainter、checkboxcelleditor、defaultbooleanconverter和IEDitableRule。这将呈现一个复选框,而不管单元格是否可编辑,尽管它允许我仅在启用
< br >我有这段代码,其中我设计了一个< code >可编辑的JComboBox来侦听我的< code>keyPressed事件,并显示一条消息,说明键已被按下。但我不知道为什么这没用。作为初学者,我可能在逻辑上/概念上犯了错误。 因此,我想征求关于如何构建代码的建议,以使其工作。 密码