Granny's Programming Pearls
"inside of every large program is a small program struggling to get out"
JavaRanch.com/granny.jsp
The moose likes Swing / AWT / SWT and the fly likes  Using JTables with  Radio Buttons Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of The Java EE 7 Tutorial Volume 1 or Volume 2 this week in the Java EE forum
or jQuery UI in Action in the JavaScript forum!
JavaRanch » Java Forums » Java » Swing / AWT / SWT
Bookmark " Using JTables with  Radio Buttons" Watch " Using JTables with  Radio Buttons" New topic
Author

Using JTables with Radio Buttons

baradhwaj chandramouli
Greenhorn

Joined: Oct 23, 2009
Posts: 3
Hi,

I ve used a Jtable to display the contents of the DB . Is It possible for me to give radio buttons for all the rows in JTable?

I ve used a button to display the JTable. I ve given my code below for reference

P.S. This s d first time am using Jtable so kindly excuse if i had not used JTables properly..


Thanks in Advance
Baradh

tablebtn.addActionListener(new ActionListener()
{

@SuppressWarnings("deprecation")
public void actionPerformed(ActionEvent ae)
{


Vector<Vector><Object>> data = new Vector<Vector><Object>>();
Connection con = null;
String url = "jdbc:mysql://192.168.1.63:3306/******";
String db = "******";
String driver = "com.mysql.jdbc.Driver";
String user = "****";
String pass = "*****";


try
{

Class.forName(driver);
con = DriverManager.getConnection(url, user, pass);
String sql ="SELECT Slno, FIRSTNAME , LASTNAME ,CITY,STATE,COUNTRY ROM addressbook WHERE Status='ACTIVE'";

PreparedStatement st = con.prepareStatement(sql);
ResultSet rs = st.executeQuery(sql);
java.sql.ResultSetMetaData md = rs.getMetaData();
int columns = md.getColumnCount();
System.out.println(sql);
Vector<String> columnNames = new Vector<String>();
p5.removeAll();
for (int i = 1; i <= columns; i++)
{
columnNames.addElement( d.getColumnName(i));

}
System.out.println(columnNames);


while (rs.next())
{
Vector<Object> row = new Vector<Object>(columns);

for (int j = 1; j <= columns; j++)
{
row.addElement(rs.getObject(j));
}

data.addElement(row);
System.out.println(row);
}

rs.close();
System.out.println("am still here2");
p5.setVisible(false);
JTable table = new JTable(data, columnNames);
JScrollPane scroll = new JScrollPane (table,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scroll.setVerticalScrollBar(new JScrollBar());
scroll.setHorizontalScrollBar(new JScrollBar());
table.setAutoResizeMode (JTable.AUTO_RESIZE_OFF);

p5.add(table);
p5.add(scroll);
p5.setVisible(true);
table.show(true);
table.revalidate();
//table.repaint();
table.enable(true);
System.out.println("after table");

}

catch(ClassNotFoundException cnfe)
{
cnfe.printStackTrace();
System.out.println("Exception" +cnfe);

}

catch(SQLException sqle)
{
sqle.printStackTrace();
System.out.println("Exception" +sqle);
}
}


});
Rob Spoor
Sheriff

Joined: Oct 27, 2005
Posts: 19674
    
  18

A few hints:

- Use Code Tags. You can edit your post to add them

- don't suppress deprecation warnings, instead look at the API for the replacements. In this case, table.show(true) should be replaced by table.setVisible(true) and table.enable(true) should be replaced by table.setEnabled(true)

- I take it that "d" is an existing table model. Don't use its names, use the names from "md" instead:
This will also prevent a possible error; TableModel indexes start at 0 whereas JDBC starts at 1, as does your loop.

- don't create new JScrollBars for the JScrollPane, it will create them itself already. You then throw these auto-generated scroll bars away to replace them with another set of newly created scroll bars.

- don't recreate the JTable and JScrollPane. Instead, create a new DefaultTableModel and set that for the existing table which then becomes a field:


Now to the original question. Do you want a radio button at the start of each row that allows you to select only one row? That will require a bit of work involving cell renderers and cell editors, and there already is a selection mechanism for JTable. First, specify to only allow one row to be selected:
Then you can click on the entire JTable and it will change the selection. You can then retrieve that selection as follows:
Setting the selection is a bit harder but not very much:
And there you have it; single row selection straight out of the box.


SCJP 1.4 - SCJP 6 - SCWCD 5 - OCEEJBD 6
How To Ask Questions How To Answer Questions
 
It is sorta covered in the JavaRanch Style Guide.
 
subject: Using JTables with Radio Buttons