如何高亮表格的某一行(不点击鼠标哦)

jayli426 2006-09-12 01:48:40

现在我要建立一个表格
例如我这个表格有十条记录,但是在这个表格new出来的时候
就将其中的3行高亮
该如何实现那??需要调用绘制器吗??
...全文
280 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jayli426 2006-09-12
  • 打赏
  • 举报
回复
其实我现在要实现的是这种效果
我没一行都对应有一个boolean项,它展示在表格中就是JCheckbox,我通过选中JCheckbox表示这行记录被选中,但同时我也希望高亮它,但是JCheckbox对应的render不是继承DefaultTableCellRenderer
而是实现了TableCellRenderer这个接口,所以就不能直接将我自己建构JTableCellRenderer 对象放入对应的JTable中,因为放进去后boolean对应的也会是DefaultTableCellRenderer ,而这默认的是JLabel,
该如何实现呢??很想看看java本身是如何将Boolean映射为JCheckbox的,哪位大虾能指点一下啊????
jayli426 2006-09-12
  • 打赏
  • 举报
回复
我的render实现,比较土

import java.awt.Color;
import java.awt.Component;
import java.util.HashSet;
import java.util.Set;

import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

public class JTableCellRenderer extends DefaultTableCellRenderer {
private int selectRow = -1;
//标识当前要被选中的行的集合,集合中存的就是行的位置
private Set selectedRowSet = new HashSet();
public JTableCellRenderer() {
super();
}

public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {

if (isSelected||selectedRowSet.contains(new Integer(row))){
this.setForeground(table.getSelectionForeground());
this.setBackground(table.getSelectionBackground());
}
else{
this.setForeground(Color.BLACK);
this.setBackground(table.getBackground()); //设置偶数行底色
}

return super.getTableCellRendererComponent(table, value, isSelected,
hasFocus, row, column);
}

/**
* @return 返回 selectRow。
*/
public int getSelectRow() {
return this.selectRow;
}

/**
* @param selectRow
* 要设置的 selectRow。
*/
public void setSelectRow(int selectRow) {
this.selectRow = selectRow;
}
/**
* @return Returns the selectedRowList.
*/
public Set getSelectedRowList() {
return selectedRowSet;
}
/**
* @param selectedRowList The selectedRowList to set.
*/
public void setSelectedRowList(Set selectedRowSet) {
this.selectedRowSet = selectedRowSet;
}

public void addOneSelectedRow(int selectedRow)
{
this.selectedRowSet.add(new Integer(selectedRow));
}

public void removeOneSelectedRow(int unselectedRow)
{
this.selectedRowSet.remove(new Integer(unselectedRow));
}
}
jayli426 2006-09-12
  • 打赏
  • 举报
回复
恐怕不行哦,老大,首先行如果不是连续,而是分隔,该如何实现啊??
remote_eyes 2006-09-12
  • 打赏
  • 举报
回复
使1到3行高亮选中,
table.addRowSelectionInterval(1, 3);

使第一行选中
table.addRowSelectionInterval(1,1);

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧