Java 如何在jtable中维护我的个人颜色行
我想为行创建一个具有不同背景颜色的jtable。 我写代码,但我有一个问题,如果我选择行或如果我滚动表格,我的个人颜色配置丢失 多谢大家 这是我的密码Java 如何在jtable中维护我的个人颜色行,java,jtable,tablecellrenderer,Java,Jtable,Tablecellrenderer,我想为行创建一个具有不同背景颜色的jtable。 我写代码,但我有一个问题,如果我选择行或如果我滚动表格,我的个人颜色配置丢失 多谢大家 这是我的密码 private void go(){ DefaultTableModel dm = (DefaultTableModel)jtLav.getModel(); dm.getDataVector().removeAllElements(); String s_sql = "query"; try{
private void go(){
DefaultTableModel dm = (DefaultTableModel)jtLav.getModel();
dm.getDataVector().removeAllElements();
String s_sql = "query";
try{
ConnessionePG con = new ConnessionePG("tifas");
Vector v_res = con.getResult(s_sql);
con.close();
Vector v_last_pos = new Vector();
Vector v_first_pos = new Vector();
String s_car_prec = "";
int i_count_col = 0;
for (int i = 0; i < v_res.size(); i++){
Hashtable ht = (Hashtable) v_res.get(i);
String s_car_att = (String) ht.get("carica");
if (i == 0){
v_first_pos.add(i);
}
else if (s_car_att.equals(s_car_prec) == false){
v_last_pos.add(i-1);
v_first_pos.add(i);
}
if (i == v_res.size() - 1){
v_last_pos.add(i);
}
s_car_prec = s_car_att;
}
for (int i = 0; i < v_res.size(); i++){
TableColumn tc = new TableColumn();
tc.setCellRenderer(new MyTableCellRenderer(v_last_pos));
Hashtable ht = (Hashtable) v_res.get(i);
System.out.println((String)ht.get("fine"));
// dati da inserire
Object o_indice_col = v_first_pos.get(i_count_col);
int i_indice_col = (int) o_indice_col;
if (i_indice_col == i){
i_count_col++;
....
}
dm.addRow(new Object[]{...
});
}
Enumeration<TableColumn> en = jtLav.getColumnModel().getColumns();
while (en.hasMoreElements()) {
TableColumn tc = en.nextElement();
tc.setCellRenderer(new MyTableCellRenderer(v_last_pos));
}
}
catch(SQLException e){
}
}
public class MyTableCellRenderer extends DefaultTableCellRenderer implements TableCellRenderer {
public MyTableCellRenderer(Vector v){
v_pos_col = v;
System.out.println(v_pos_col);
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
setBackground(null);
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
setText(String.valueOf(value));
Vector v_col = new Vector();
v_col.add(new Color(238,218,226));
v_col.add(Color.white);
Color col_now = null;
try{
Object o_indice_col = v_pos_col.get(i_count_col);
int i_indice_col = (int) o_indice_col;
col_now = (Color)v_col.get(i_col % 2);
setBackground((Color)v_col.get(i_col % 2));
if (row == i_indice_col){
i_count_col++;
i_col++;
}
}
catch(ArrayIndexOutOfBoundsException e){}
return this;
}
int i_col = 0;
int i_count_col = 0;
Vector v_pos_col = new Vector();
}
private void go(){
DefaultTableModel dm=(DefaultTableModel)jtLav.getModel();
dm.getDataVector().removeAllElements();
字符串s_sql=“query”;
试一试{
ConnessionePG con=新ConnessionePG(“tifas”);
向量v_res=con.getResult(s_sql);
con.close();
向量v_last_pos=新向量();
向量v_first_pos=新向量();
字符串s_car_prec=“”;
int i_count_col=0;
对于(int i=0;i
每次调用getTableCellRenderComponent()方法时,都需要创建一个新的向量。每次需要渲染单元格时都会调用此方法。因此,由于创建了一个新向量,因此将丢失所有颜色信息
因此,您需要创建向量,并为该方法之外的每一行指定一种颜色。然后,在该方法中,只需引用向量中的颜色
我不明白你的确切要求,所以我不能给你确切的代码,只能给你指出一个不同的方向。我解决了我的问题。我向我的类传递一个包含每一行及其颜色的哈希表
public class MyTableCellRenderer extends DefaultTableCellRenderer implements TableCellRenderer {
public MyTableCellRenderer(Hashtable h){
ht = h;
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
setBackground(null);
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
setText(String.valueOf(value));
setBackground(ht.get(row));
return this;
}
Hashtable<Reference, Color> ht = null;
}
公共类MyTableCellRenderer扩展了DefaultTableCellRenderer实现了TableCellRenderer{
公共MyTableCellRenderer(哈希表h){
ht=h;
}
@凌驾
公共组件GetTableCellRenderComponent(JTable表、对象值、布尔isSelected、布尔hasFocus、int行、int列){
倒退(空);
getTableCellRenderComponent(表、值、isSelected、hasFocus、行、列);
setText(String.valueOf(value));
倒退(ht.get(row));
归还这个;
}
哈希表ht=null;
}
public class MyTableCellRenderer extends DefaultTableCellRenderer implements TableCellRenderer {
public MyTableCellRenderer(Hashtable h){
ht = h;
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
setBackground(null);
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
setText(String.valueOf(value));
setBackground(ht.get(row));
return this;
}
Hashtable<Reference, Color> ht = null;
}