做个软件修改渲染器也不行无法设置单个单元格颜色(设置别的格之前的表格颜色不改变)。
界面源代码发下求大神解决:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;public class TableExample extends JFrame implements ActionListener{
private JScrollPane scrollPane;
private JPanel contentPane;
private JTable table;
private JPanel panel;
private JButton backgroundButton;
private JColorChooser jColorChooser;
static Vector<Cell> Cellvector=new Vector<Cell>();
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TableExample frame = new TableExample();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public TableExample() {
this.setTitle("JTable背景颜色设定练习");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 712, 541);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
scrollPane = new JScrollPane();
contentPane.add(scrollPane, BorderLayout.CENTER);
table = new JTable();
scrollPane.setViewportView(table);
String[] Column={"第一列","第二列","第三列","第四列"}; //设定列名
DefaultTableModel TableModle=new DefaultTableModel();
TableModle.setColumnIdentifiers(Column);
TableModle.setRowCount(20);
for(int i=0;i<20;i++){ //输入行值
for(int j=0;j<4;j++){
TableModle.setValueAt("["+i+","+j+"]", i, j);
}
}
table.setModel(TableModle);
jColorChooser=new JColorChooser();
contentPane.add(jColorChooser, BorderLayout.SOUTH);
panel = new JPanel();
contentPane.add(panel, BorderLayout.NORTH);
backgroundButton = new JButton("\u8BBE\u7F6E\u5355\u5143\u683C\u80CC\u666F\u989C\u8272");
backgroundButton.addActionListener(this);
panel.add(backgroundButton);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==backgroundButton){
int row=table.getSelectedRow(); //得到所选行索引
int column=table.getSelectedColumn(); //得到所选列索引
Color background=jColorChooser.getColor();//得到所选颜色
if((row!=-1)&&(column!=-1)){ //判断是否存在单元格 }
}
}
}jtablejavajavase软件
解决方案 »
- 请问谁有详细的 lzw 算法的详细资料?
- 简单的运算: 这个运算结果是什么?
- J2SDK 和 TOMCAT 都配置好了。但是JSP无法调试运行。
- 急!!!Linux 下javac 编译的问题,高分求解....
- java类的调用问题,请帮帮吧,已经被这问题烦了一个月了。
- 关于用Java生成Excel
- 初学java,请教JComboBox选项判断的问题
- 初学,不才,望解惑
- 一道题难住了很多人,看看你是不是一个!
- 是不是有一个50mb左右的jdk,那是什么东东,可以在哪里下载
- 分不够了但是很想知道我用s:property的到了一个1.jpg的字符串怎么将他放到img的src中去
- 数组查询快,链表增删快?
if ((row != -1) && (column != -1)) { //判断是否存在单元格
table.setSelectionBackground(background);//设置选中背景色
}
colorMap.put(p, color);然后 fire table 的更新。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Point;
import java.util.HashMap;
import java.util.Map;
import javax.swing.BorderFactory;
import javax.swing.JColorChooser;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
/**
*
* @date 18/06/2013
*/
public class TableCellColorDemo {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() { @Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
JFrame f = new JFrame("Test Table Cell Background");
final BackgroundMutableCellRenderer renderer = new BackgroundMutableCellRenderer();
final JTable table = new JTable(new DummyTableModel(5, 10));
table.setDefaultRenderer(Object.class, renderer);
table.setPreferredScrollableViewportSize(table.getPreferredSize());
final JColorChooser colorChooser = new JColorChooser();
colorChooser.getSelectionModel().addChangeListener(new ChangeListener() { @Override
public void stateChanged(ChangeEvent e) {
int row = table.getSelectedRow();
int column = table.getSelectedColumn();
renderer.setBackground(row, column, colorChooser.getColor());
table.repaint();
}
});
f.getContentPane().setLayout(new BorderLayout(5, 5));
f.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
f.getContentPane().add(colorChooser, BorderLayout.SOUTH);
((JComponent)f.getContentPane()).setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
f.pack();
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setVisible(true);
}
catch(Exception e) {
e.printStackTrace();
}
}
});
}
}
class DummyTableModel extends AbstractTableModel {
/*
* rows & columns count of the dummy table model, accessed in EDT only
*/
private Dimension size;
DummyTableModel(int width, int height) {
assert width > 0;
assert height > 0;
this.size = new Dimension(width, height);
} @Override
public int getRowCount() {
return size.height;
} @Override
public int getColumnCount() {
return size.width;
} @Override
public Object getValueAt(int rowIndex, int columnIndex) {
return String.format("CELL [ %03d, %03d ]", rowIndex + 1, columnIndex + 1);
}
@Override
public String getColumnName(int column) {
return "COLUMN " + (column + 1);
}
}class BackgroundMutableCellRenderer extends DefaultTableCellRenderer {
/*
* the default color blending ratio, when mixing the default "selection background
* color" and the specifically set cell background color.
*/
private static final float DEFAULT_MIX_RATIO = 0.5f;
/*
* store the background color set, accessed in EDT only
*/
private Map<Point, Color> mapBGs;
/*
* store the original background color of the super implementation, accessed
* in EDT only
*/
private Color origBG;
BackgroundMutableCellRenderer() {
mapBGs = new HashMap<Point, Color>();
origBG = super.getBackground();
}
void setBackground(int row, int col, Color c) {
mapBGs.put(new Point(row, col), c);
}
@Override
public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
Component result = super.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, column);
Color c = mapBGs.get(new Point(row, column));
if( table.getSelectedRow() == row ) {
if( c != null )
result.setBackground(mix(result.getBackground(), c, DEFAULT_MIX_RATIO));
}
else {
result.setBackground(c == null ? origBG : c);
}
return result;
}
private Color mix(Color c1, Color c2, float ratio) {
float rest = 1.0f - ratio;
int r = (int)(c1.getRed() * ratio + c2.getRed() * rest);
int g = (int)(c1.getGreen() * ratio + c2.getGreen() * rest);
int b = (int)(c1.getBlue() * ratio + c2.getBlue() * rest);
return new Color(r, g, b);
}
}