You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
3.7 KiB
Java
106 lines
3.7 KiB
Java
Color selected cells in a JTable
|
|
|
|
public class TableColorSelection extends JFrame {
|
|
String[] columns = { "mon","tue","wed" };
|
|
public static Color givenColor = new Color(255,128,54);
|
|
static JTable table;
|
|
|
|
public TableColorSelection() {
|
|
DefaultTableModel model = new DefaultTableModel(columns,0) {
|
|
public boolean isCellEditable(int row,int col) {
|
|
return false;
|
|
}
|
|
};
|
|
model.addRow(new Object[]{ "1","2","3" });
|
|
model.addRow(new Object[]{ "4","5","6" });
|
|
model.addRow(new Object[]{ "7","8","9" });
|
|
|
|
Object[] defaultOffDays = { "3","6","9" };
|
|
|
|
table = new MT(model,defaultOffDays);
|
|
table.setCellSelectionEnabled(true);
|
|
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
|
|
|
JScrollPane scroller = new JScrollPane(table);
|
|
|
|
scroller.setBounds(10,10,300,200);
|
|
|
|
JPanel panel = new JPanel();
|
|
|
|
panel.setLayout(null);
|
|
panel.add(scroller);
|
|
|
|
getContentPane().add(panel);
|
|
setSize(400,400);
|
|
setVisible(true);
|
|
}
|
|
public static void main(String[] arg) {
|
|
TableColorSelection tt = new TableColorSelection();
|
|
}
|
|
}
|
|
|
|
class MT extends JTable {
|
|
public MT(TableModel dm,Object[] defaultOffDays) {
|
|
super(dm);
|
|
setDefaultRenderer(Object.class,new MyCellRenderer(defaultOffDays));
|
|
}
|
|
public void changeSelection(int r,int c,boolean toggle,boolean extend) {
|
|
super.changeSelection(r,c,toggle,extend);
|
|
|
|
MyCellRenderer renderer = (MyCellRenderer) getDefaultRenderer(Object.class);
|
|
|
|
Object val = getValueAt(r,c);
|
|
|
|
if (renderer.isRed(val)) {
|
|
renderer.makeBlue(val);
|
|
}
|
|
else {
|
|
renderer.clearValue();
|
|
}
|
|
}
|
|
|
|
class MyCellRenderer extends DefaultTableCellRenderer {
|
|
java.util.ArrayList selectedValues = new java.util.ArrayList();
|
|
Object v = null;
|
|
|
|
public MyCellRenderer(Object[] defaultOffDays) {
|
|
for (int i = 0; i < defaultOffDays.length; i++) {
|
|
selectedValues.add(defaultOffDays);
|
|
}
|
|
}
|
|
public Component getTableCellRendererComponent(JTable table,Object value,
|
|
boolean isSelected,boolean hasFocus,int row,int column) {
|
|
JLabel label = (JLabel) super.getTableCellRendererComponent(table,value,isSelected,
|
|
hasFocus,row,column);
|
|
|
|
setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
|
|
setText(value.toString());
|
|
|
|
if (isSelected && (v != value)) {
|
|
setForeground(Color.RED);
|
|
|
|
if (!selectedValues.contains(value)) {
|
|
//value already remembered, and reselected, make FG blue
|
|
selectedValues.add(value);
|
|
}
|
|
}
|
|
else {
|
|
//not selected
|
|
setForeground(selectedValues.contains(value) ? Color.RED : Color.BLUE);
|
|
}
|
|
return label;
|
|
}
|
|
public boolean isRed(Object value) {
|
|
// System.out.println("isRed: " + selectedValues.contains(value));
|
|
return selectedValues.contains(value);
|
|
}
|
|
public void makeBlue(Object value) {
|
|
v = value;
|
|
selectedValues.remove(value);
|
|
}
|
|
public void clearValue() {
|
|
v = null;
|
|
}
|
|
}
|
|
}
|