Narendranath
asked on
How to disable a checkbox in Jtable
In my Jtable i have a column which is a boolean type. I need to disable some of the cells in this column.
How it is possible?
How it is possible?
It depends what rule you want to use to decide which cells are "disabled".
To "disable" the check box you could use the isCellEditable() method of the underlying TableModel. To change the color of the cells you create a custom cell renderer.
You could also use the custome cell renderer to disable the checkbox.
Can you tell me which cells you would want to disable in the column ?
To "disable" the check box you could use the isCellEditable() method of the underlying TableModel. To change the color of the cells you create a custom cell renderer.
You could also use the custome cell renderer to disable the checkbox.
Can you tell me which cells you would want to disable in the column ?
ASKER
i want to disable some cells is the columns which are of type boolean.
You said above that you have a whole column that is boolean, are you saying that you want to diable all the cells in that column ?
ASKER
not all the cells i want make some cell in that col as disabled.
Yes, what I want to know is what rule you will use to decide which of the cells in that column to disable and which ones not to disable.
ASKER
suppose i have three columns
1. Name
2. age
3. Rights
if the age is less than 18 then i will disable the Rights cell for that record.
if not i will enable the column.
1. Name
2. age
3. Rights
if the age is less than 18 then i will disable the Rights cell for that record.
if not i will enable the column.
Here is an example using a table model to allow editing of cells based on the value of other cells in the same row.
import java.awt.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
public class TableCellRenderingExample3 extends JFrame{
Container contentPane;
JTable table;
JScrollPane scroller;
Vector headers;
Vector data;
int rows = 100;
public TableCellRenderingExample3 (String args[]){
super("TableCellRenderingE xample");
this.setDefaultCloseOperat ion(EXIT_O N_CLOSE);
contentPane = this.getContentPane();
contentPane.setLayout(new BorderLayout());
if (args.length > 1){rows = Integer.parseInt(args[0]); }
headers = buildHeaders();
data = buildData(rows);
SimpleTableModel stm = new SimpleTableModel(data,head ers);
table = new JTable(stm);
scroller = new JScrollPane(table);
contentPane.add(scroller,B orderLayou t.CENTER);
}
public static void main(String args[]){
TableCellRenderingExample3 tcre = new TableCellRenderingExample3 (args);
tcre.setSize(600,400);
tcre.setVisible(true);
}
private Vector buildData(int rows){
Vector v = new Vector();
Vector r;
for (int i = 0; i < rows; i++){
r = new Vector();
r.addElement("Name " + i);
Integer age = new Integer((int)(Math.floor(M ath.random () * (50 - 1)) + 1));
r.addElement(age);
Boolean rights = new Boolean((age.intValue() > 17) ? true : false);
r.addElement(rights);
v.addElement(r);
}
return v;
}
private Vector buildHeaders(){
Vector v = new Vector();
v.addElement(new String("Name"));
v.addElement(new String("Age"));
v.addElement(new String("Rights"));
return v;
}
}
class SimpleTableModel extends AbstractTableModel {
private Vector dataVector;
private Vector headingVector;
public SimpleTableModel(Vector dataVector, Vector headingVector) {
this.dataVector = dataVector;
this.headingVector = headingVector;
}
public int getColumnCount() {
return headingVector.size();
}
public int getRowCount() {
return dataVector.size();
}
public Object getValueAt(int row, int col) {
Vector rowVector = (Vector)dataVector.element At(row);
return rowVector.elementAt(col);
}
public String getColumnName(int column) {
return headingVector.elementAt(co lumn).toSt ring();
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int row, int col) {
if (col == 2 && ((Integer)getValueAt(row,c ol-1)).int Value() < 18){
return false;
}else{
return true;
}
}
public void setValueAt(Object aValue, int row, int col) {
Vector rowVector = (Vector)dataVector.element At(row);
rowVector.setElementAt(aVa lue, col);
}
}
import java.awt.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
public class TableCellRenderingExample3
Container contentPane;
JTable table;
JScrollPane scroller;
Vector headers;
Vector data;
int rows = 100;
public TableCellRenderingExample3
super("TableCellRenderingE
this.setDefaultCloseOperat
contentPane = this.getContentPane();
contentPane.setLayout(new BorderLayout());
if (args.length > 1){rows = Integer.parseInt(args[0]);
headers = buildHeaders();
data = buildData(rows);
SimpleTableModel stm = new SimpleTableModel(data,head
table = new JTable(stm);
scroller = new JScrollPane(table);
contentPane.add(scroller,B
}
public static void main(String args[]){
TableCellRenderingExample3
tcre.setSize(600,400);
tcre.setVisible(true);
}
private Vector buildData(int rows){
Vector v = new Vector();
Vector r;
for (int i = 0; i < rows; i++){
r = new Vector();
r.addElement("Name " + i);
Integer age = new Integer((int)(Math.floor(M
r.addElement(age);
Boolean rights = new Boolean((age.intValue() > 17) ? true : false);
r.addElement(rights);
v.addElement(r);
}
return v;
}
private Vector buildHeaders(){
Vector v = new Vector();
v.addElement(new String("Name"));
v.addElement(new String("Age"));
v.addElement(new String("Rights"));
return v;
}
}
class SimpleTableModel extends AbstractTableModel {
private Vector dataVector;
private Vector headingVector;
public SimpleTableModel(Vector dataVector, Vector headingVector) {
this.dataVector = dataVector;
this.headingVector = headingVector;
}
public int getColumnCount() {
return headingVector.size();
}
public int getRowCount() {
return dataVector.size();
}
public Object getValueAt(int row, int col) {
Vector rowVector = (Vector)dataVector.element
return rowVector.elementAt(col);
}
public String getColumnName(int column) {
return headingVector.elementAt(co
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int row, int col) {
if (col == 2 && ((Integer)getValueAt(row,c
return false;
}else{
return true;
}
}
public void setValueAt(Object aValue, int row, int col) {
Vector rowVector = (Vector)dataVector.element
rowVector.setElementAt(aVa
}
}
ASKER
Ok one part of my problem is solved. but now i need to change the color of the disabled checkbox to gray.
Is it possible to change the color?
Is it possible to change the color?
ASKER
If i tab out from an enabled cell to the disabled cell then the focus should not go that disabled cell, instead it has to go to the next enabled cell.
How i have to achieve this?
Please tell.
How i have to achieve this?
Please tell.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER