Java 在一列中勾选复选框后,如何动态更改JTable中的行背景色?
我试图在JTable中呈现一些数据。我已经创建了Jtable,除了更改某些特定行的背景色之外,所有内容都是清晰的,在这些行中,用户在最后一列上勾选一个复选框。它必须动态工作。你能给我一些提示、密码等吗 像这样的Java 在一列中勾选复选框后,如何动态更改JTable中的行背景色?,java,swing,colors,jtable,jcheckbox,Java,Swing,Colors,Jtable,Jcheckbox,我试图在JTable中呈现一些数据。我已经创建了Jtable,除了更改某些特定行的背景色之外,所有内容都是清晰的,在这些行中,用户在最后一列上勾选一个复选框。它必须动态工作。你能给我一些提示、密码等吗 像这样的 import java.awt.BorderLayout; import java.util.Vector; import javax.swing.*; import java.awt.*; import javax.swing.event.TableModelListener; imp
import java.awt.BorderLayout;
import java.util.Vector;
import javax.swing.*;
import java.awt.*;
import javax.swing.event.TableModelListener;
import javax.swing.table.*;
public class JTableTest extends JFrame implements TableModel{
Vector<Object[]> lines = new Vector<Object[]>();
private String[] headers = {"String","Boolean"};
public JTableTest(){
for (int t = 0; t < 100; t++) lines.addElement(new Object[]{"Row "+t,Boolean.FALSE});
JPanel p = (JPanel)getContentPane();
p.setLayout(new BorderLayout());
JTable table = new JTable();
table.setDefaultRenderer(String.class, new MyRenderer());
p.add(new JScrollPane(table));
table.setModel(this);
p.setPreferredSize(new Dimension(400,200));
pack();
setVisible(true);
}
public static void main(String[] args){
new JTableTest();
}
@Override
public int getRowCount() {
return lines.size()+1;
}
@Override
public int getColumnCount() {
return headers.length;
}
@Override
public String getColumnName(int columnIndex) {
return headers[columnIndex];
}
@Override
public Class<?> getColumnClass(int col) {
if (col == 1) return Boolean.class;
return String.class;
}
@Override
public boolean isCellEditable(int row, int col) {
return col==1;
}
@Override
public Object getValueAt(int row, int col) {
return lines.elementAt(row)[col];
}
@Override
public void setValueAt(Object aValue, int row, int col) {
lines.elementAt(row)[col] = aValue;
}
@Override
public void addTableModelListener(TableModelListener l) {
}
@Override
public void removeTableModelListener(TableModelListener l) {
}
private class MyRenderer extends DefaultTableCellRenderer{
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (lines.elementAt(row)[1] == Boolean.TRUE) c.setBackground(Color.orange);
else c.setBackground(table.getBackground());
table.repaint();
return c;
}
}
}
导入java.awt.BorderLayout;
导入java.util.Vector;
导入javax.swing.*;
导入java.awt.*;
导入javax.swing.event.TableModelListener;
导入javax.swing.table.*;
public类JTableTest扩展JFrame实现表模型{
向量线=新向量();
私有字符串[]头={“字符串”,“布尔值”};
公共JTableTest(){
对于(int t=0;t<100;t++)行。addElement(新对象[]{“Row”+t,Boolean.FALSE});
JPanel p=(JPanel)getContentPane();
p、 setLayout(新的BorderLayout());
JTable table=新的JTable();
table.setDefaultRenderer(String.class,新的MyRenderer());
p、 添加(新JScrollPane(表));
表.setModel(本);
p、 setPreferredSize(新尺寸(400200));
包装();
setVisible(真);
}
公共静态void main(字符串[]args){
新JTableTest();
}
@凌驾
public int getRowCount(){
返回行。大小()+1;
}
@凌驾
public int getColumnCount(){
返回页眉长度;
}
@凌驾
公共字符串getColumnName(int columnIndex){
返回标题[列索引];
}
@凌驾
公共类getColumnClass(int-col){
如果(col==1)返回Boolean.class;
返回字符串.class;
}
@凌驾
公共布尔值可编辑(int行,int列){
返回col==1;
}
@凌驾
公共对象getValueAt(整数行,整数列){
返回行。元素(行)[col];
}
@凌驾
public void setValueAt(对象有效、整行、整列){
行.elementAt(row)[col]=aValue;
}
@凌驾
公共void addTableModelListener(TableModelListener l){
}
@凌驾
公共void removeTableModelListener(TableModelListener l){
}
私有类MyRenderer扩展了DefaultTableCellRenderer{
@凌驾
公共组件GetTableCellRenderComponent(JTable表、对象值、布尔isSelected、布尔hasFocus、int行、int列){
Component c=super.getTableCellRenderComponent(表、值、isSelected、hasFocus、行、列);
if(lines.elementAt(row)[1]==Boolean.TRUE)c.setBackground(Color.orange);
else c.setBackground(table.getBackground());
表1.repaint();
返回c;
}
}
}
阅读有关TbelCellRenderer的信息,并使用所述逻辑实现您自己的功能,这可能会对您有所帮助。。