Hi
I am trying to implement a Button Renderer in the TableColumnGroup, and disable the Buttons at a certain time.
Below is a sample code of disabling the Buttons in a table cell and table header.
Before I am using the TableColumnGroup to group the columns, the code is working, both buttons in the table cell and table header can be disabled.
However, Once I added the table columns into the TableColumnGroup, neither the button in the table header nor the button in the TableColumnGroup can be disabled.
The code highlighted in blue are the new code, without them disabling the table header is still working.
Does anyone have any suggestions on how I can make the buttons in TableColumnGroup disabled?
Thanks!
--------------------------------------------------------------------------------
public class TableButton implements ActionListener {
JTable table;
TableColumnGroup tcg;
public void actionPerformed(ActionEvent e) {
JButton editorButton = (JButton)e.getSource();
String ac = editorButton.getActionCommand();
System.out.println("ac = " + ac);
}
private JScrollPane getContent() {
table = new JTable(getModel());
table.setCellSelectionEnabled(true);
int height = (new JButton(" ")).getPreferredSize().height;
table.setRowHeight(height);
NestedTableHeader header = new NestedTableHeader(table);
table.setTableHeader(header);
TableColumnModel colModel = table.getColumnModel();
colModel.getColumn(0).setCellRenderer( new ButtonRenderer());
colModel.getColumn(0).setHeaderRenderer( new ButtonRenderer());
tcg = new TableColumnGroup("A and B");
tcg.add(colModel.getColumn(0));
tcg.add(colModel.getColumn(1));
tcg.setHeaderRenderer( new ButtonRenderer());
header.addColumnGroup(tcg);
return new JScrollPane(table);
}
private AbstractTableModel getModel() {
return new AbstractTableModel() {
public int getColumnCount() { return 3; }
public int getRowCount() { return 6;}
public boolean isCellEditable(int row, int col) {
return col == 0;
}
public Object getValueAt(int row, int col) {
if(col == 0)
return "Button " + (row + 1) + (col + 1);
return String.valueOf(row + 1) + (col + 1);
}
};
}
private JPanel getLastPanel() {
JToggleButton toggle = new JToggleButton("Disable Buttons");
toggle.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JToggleButton tb = (JToggleButton)e.getSource();
TableColumn col= table.getColumnModel().getColumn(0);
ButtonRenderer renderer = (ButtonRenderer)col.getCellRenderer();
ButtonRenderer headerrenderer = (ButtonRenderer)col.getHeaderRenderer();
ButtonRenderer colgrouprenderer = (ButtonRenderer)tcg.getHeaderRenderer();
boolean enable;
if(tb.isSelected()) {
enable = false;
tb.setText("Enable Buttons");
} else {
enable = true;
tb.setText("Disable Buttons");
}
renderer.setEnabled(enable);
headerrenderer.setEnabled(enable);
colgrouprenderer.setEnabled(enable);
table.getTableHeader().repaint();
table.repaint();
}
});
JPanel panel = new JPanel();
panel.add(toggle);
return panel;
}
public static void main(String[] args) {
TableButton test = new TableButton();
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(test.getContent());
f.getContentPane().add(test.getLastPanel(), "Last");
f.setSize(340,300);
f.setLocation(200,200);
f.setVisible(true);
}
}
class ButtonRenderer implements TableCellRenderer {
JButton button;
boolean enabled = true;
public ButtonRenderer() {
button = new JButton();
}
public Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row, int column) {
String text = (String)value;
button.setText(text);
button.setEnabled(enabled);
return button;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
}