Java 如何在确定的表格单元格中更改背景色
我有定制的桌面渲染器Java 如何在确定的表格单元格中更改背景色,java,swing,jtable,tablecellrenderer,Java,Swing,Jtable,Tablecellrenderer,我有定制的桌面渲染器 public class CustomCellRenderer extends JLabel implements TableCellRenderer { private TableCellRenderer defaultCellRenderer; public CustomCellRenderer(TableCellRenderer defaultCellRenderer) { this.defaultCellRenderer =
public class CustomCellRenderer extends JLabel implements TableCellRenderer {
private TableCellRenderer defaultCellRenderer;
public CustomCellRenderer(TableCellRenderer defaultCellRenderer) {
this.defaultCellRenderer = defaultCellRenderer;
}
public Component getTableCellRendererComponent(JTable table, Object ovalue, boolean isSelected, boolean hasFocus, int row, int column) {
String val = (String) ovalue;
Component c = defaultCellRenderer.getTableCellRendererComponent(table, ovalue, isSelected, hasFocus, row, column);
if (c != null) {
if (val.equals("0h")) {
c.setForeground(Color.RED);
} else {
c.setForeground(table.getForeground());
}
return c;
} else return null;
}
}
TableCellRenderer renderer = new CustomCellRenderer(sumTable.getDefaultRenderer(columnModel.getColumn(i).getClass()));
columnModel.getColumn(i).setCellRenderer(renderer);
它正常工作,我需要改变单元格背景颜色,它设置的颜色不是在某些单元格中,而是在所有列中,所有单元格中
...
if (val.equals("0h")) {
c.setBackground(Color.GRAY);
} else {
c.setForeground(table.getForeground());
}
...
我需要做什么 在else语句中,您需要将您的背景设置为其他内容。例如:
c.背景(颜色:白色)代码>
我需要做什么
- 有两个参数
int row
和int column
使用矩阵中的这两个坐标
- 必须接受并且不要伪造Java中所有(???
数组都是以零开始的
(0,0)
是第一行中的第一列
编辑
import java.awt.*;
导入java.util.Vector;
导入java.util.regex.Pattern;
导入javax.swing.*;
导入javax.swing.table.*;
公共类HiglightNumberValueInTableCell{
私有字符串测试;
私有JFrame=新JFrame(“frameTitle”);
private JScrollPane tblS=new JScrollPane();
专用JTable-tbl;
私有向量rOrH;
专用长t1=0L;
专用长t2=0L;
公共HiglightNumberValueInTableCell(){
t1=System.currentTimeMillis();
int regLenght=25000;
int chars=0;
AlphaChars aChars=新的AlphaChars();
testS=aChars.getNext(regLenght);
rOrH=新向量();
向量rowD=新向量();
对于(int e=0;e50){//表单元格中有一个字符
如果(字符数>20){
chars=1;
添加(rOrH);
rOrH=新向量();
}
//String str=(testS.substring(e,(e+1))).toString();//表单元格中的一个字符
字符串str=(testS.substring(e,(e+5))).toString();
如果(str!=null){
添加(str);
}否则{
加上(“”);
}
//e++;//表单元格中有一个字符
e+=5;
}
rOrH=新向量();
//对于(int i=0;i<50;i++){//表单元格中的一个字符
对于(int i=0;i<20;i++){
rOrH.add(String.valueOf(i+1));
}
tbl=新JTable(rowD,rOrH);
tblS=新的JScrollPane(tbl,ScrollPaneConstants.VERTICAL\u SCROLLBAR\u根据需要,
ScrollPaneConstants.水平滚动条(根据需要);
tblS.setPreferredSize(新尺寸(1000403));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
框架。添加(tblS,边框布局。中心);
帧设置位置(50,50);
frame.pack();
addColumnRenders();
}
私有void addColumnRenders(){
对于(int i=0;ipublic Component getTableCellRendererComponent(
JTable table, Object ovalue, boolean isSelected,
boolean hasFocus, int row, int column) {
import java.awt.*;
import java.util.Vector;
import java.util.regex.Pattern;
import javax.swing.*;
import javax.swing.table.*;
public class HiglightNumberValueInTableCell {
private String testS;
private JFrame frame = new JFrame("frameTitle");
private JScrollPane tblS = new JScrollPane();
private JTable tbl;
private Vector<String> rOrH;
private long t1 = 0L;
private long t2 = 0L;
public HiglightNumberValueInTableCell() {
t1 = System.currentTimeMillis();
int regLenght = 25000;
int chars = 0;
AlphaChars aChars = new AlphaChars();
testS = aChars.getNext(regLenght);
rOrH = new Vector<String>();
Vector<Vector<String>> rowD = new Vector<Vector<String>>();
for (int e = 0; e < regLenght;) {
chars++;
//if (chars > 50) { //one char in table cell
if (chars > 20) {
chars = 1;
rowD.add(rOrH);
rOrH = new Vector<String>();
}
//String str = (testS.substring(e, (e + 1))).toString();//one char in table cell
String str = (testS.substring(e, (e + 5))).toString();
if (str != null) {
rOrH.add(str);
} else {
rOrH.add("");
}
//e++;//one char in table cell
e += 5;
}
rOrH = new Vector<String>();
//for (int i = 0; i < 50; i++) {//one char in table cell
for (int i = 0; i < 20; i++) {
rOrH.add(String.valueOf(i + 1));
}
tbl = new JTable(rowD, rOrH);
tblS = new JScrollPane(tbl, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
tblS.setPreferredSize(new Dimension(1000, 403));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(tblS, BorderLayout.CENTER);
frame.setLocation(50, 50);
frame.pack();
addColumnRenderes();
}
private void addColumnRenderes() {
for (int i = 0; i < tbl.getColumnCount(); i++) {
RowColorRenderer rowRenderer = new RowColorRenderer(i);
TableColumn column = tbl.getColumnModel().getColumn(i);
column.setCellRenderer(rowRenderer);
}
Runnable doRun = new Runnable() {
@Override
public void run() {
showFrame();
}
};
SwingUtilities.invokeLater(doRun);
}
private void showFrame() {
Runnable doRun = new Runnable() {
@Override
public void run() {
frame.setVisible(true);
t2 = System.currentTimeMillis();
System.out.println("miliSec:" + (t2 - t1)); //aver. 45 miliSec.
}
};
SwingUtilities.invokeLater(doRun);
}
private class RowColorRenderer extends DefaultTableCellRenderer {
private static final long serialVersionUID = 1L;
private int colNo = 0;
RowColorRenderer(int col) {
colNo = col;
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
Component comp = super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
JComponent jc = (JComponent) comp;
if (!isSelected) {
if (table.getValueAt(row, colNo) != null) {
String str = table.getValueAt(row, colNo).toString();
if (!str.isEmpty()) {
if (Pattern.compile("\\d").matcher(str).find()) {
if (((Pattern.compile("[02468]").matcher(str).find()))
&& (!(Pattern.compile("[13579]").matcher(str).find()))) {
setForeground(Color.magenta);
setBackground(Color.orange);
} else if ((!(Pattern.compile("[02468]").matcher(str).find()))
&& ((Pattern.compile("[13579]").matcher(str).find()))) {
setForeground(Color.blue);
setBackground(Color.yellow);
} else if (((Pattern.compile("[02468]").matcher(str).find()))
&& ((Pattern.compile("[13579]").matcher(str).find()))) {
setForeground(Color.red);
setBackground(Color.cyan);
}
setFont(new Font("Serif", Font.BOLD, 12));
setHorizontalAlignment(CENTER);
} else {
setBackground(table.getBackground());
setForeground(table.getForeground());
setFont(new Font("Serif", Font.PLAIN, 8));
setHorizontalAlignment(CENTER);
}
}
}
}
return this;
}
}
private class AlphaChars {
public static final int MIN_LENGTH = 2000;
private java.util.Random rand = new java.util.Random();
private char[] AlphaChars = {
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q',
'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q',
'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '+', '-', '*', '/', '<', '>', '&',
'#', '@', '{', '}', '?', ':', '_', '"', '!', ')', '('};
public String getNext() {
StringBuilder strbuf = new StringBuilder();
for (int i = 0; i < MIN_LENGTH; i++) {
strbuf.append(getAlphaChars()[getRand().nextInt(getAlphaChars().length)]);
}
return strbuf.toString();
}
public String getNext(int reqLenght) {
StringBuilder strbuf = new StringBuilder();
for (int i = 0; i < reqLenght; i++) {
strbuf.append(getAlphaChars()[getRand().nextInt(getAlphaChars().length)]);
}
return strbuf.toString();
}
public java.util.Random getRand() {
return rand;
}
public void setRand(java.util.Random aRand) {
rand = aRand;
}
public char[] getAlphaChars() {
return AlphaChars;
}
public void setAlphaChars(char[] aAlphaChars) {
AlphaChars = aAlphaChars;
}
}
public static void main(String args[]) {
HiglightNumberValueInTableCell hnvit = new HiglightNumberValueInTableCell();
}
}