MyJTableDialog.java
Home
This example demonstrates an number of things, including emulating radio buttons in a JTable with check boxes, as well as
passing the table listener to the inner class in order to access the table changed event from the outer class.
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;
public class MyJTableDialog extends JDialog {
JButton btnenable;
JButton btnApply;
JButton btnCancel;
MainPanel mainPanel;
public MyJTableDialog() {
this.setTitle("MyJTableDialog");
this.setModal(true);
mainPanel = new MainPanel();
this.add(mainPanel);
this.setBounds(200,200,635, 340);
}
public static class MainPanel extends JPanel implements ActionListener , TableModelListener{
JButton btnEnable;
JButton btnApply;
JButton btnCancel;
TablePanel tablePanel;
JLabel title;
boolean isARowChecked=false;
public MainPanel(){
setLayout(null);
title = new JLabel("Enabled when checked:");
title.setBounds(50,10,300, 20);
this.add(title);
tablePanel = new TablePanel(this); //this
this.add(tablePanel);
tablePanel.setBounds(10,30,600, 200);
btnEnable = new JButton("Enabled when checked");
btnEnable.setBounds(110,240, 170, 20);
btnEnable.setEnabled(false);
add(btnEnable);
btnEnable.setActionCommand(AC.enableButton);
btnEnable.addActionListener(this);
btnApply = new JButton("Apply");
btnApply.setBounds(300, 240, 80, 20);
add(btnApply);
btnApply.setActionCommand(AC.applyButton);
btnApply.addActionListener(this);
btnCancel = new JButton("Cancel");
btnCancel.setBounds(400,240, 80, 20);
add(btnCancel);
btnCancel.setActionCommand(AC.cancelButton);
btnCancel.addActionListener(this);
}
private static class AC
{
public static final String enableButton = "AC_enableButton";
public static final String applyButton = "AC_applyButton";
public static final String cancelButton = "AC_cancelButton";
}
@Override
public void actionPerformed(ActionEvent e)
{
String ac = e.getActionCommand();
if (ac == AC.enableButton){
// http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html
//custom title, no icon
JOptionPane.showMessageDialog(this,
"The enabled button was clicked.",
"A plain message",
JOptionPane.PLAIN_MESSAGE);
}
else if (ac == AC.applyButton){
//custom title, no icon
JOptionPane.showMessageDialog(this,
"The apply button was clicked.",
"A plain message",
JOptionPane.PLAIN_MESSAGE);
}
else if (ac == AC.cancelButton){
btnEnable.setEnabled(false);
int rowCount = tablePanel.model.getRowCount();
for (int i = 0; i < rowCount; i++){
tablePanel.model.setValueAt(false, i, 1);
}
tablePanel.model.setValueAt(false, 0, 1);
}
}
@Override
public void tableChanged(TableModelEvent e) {
if (e.getType() == TableModelEvent.UPDATE & e.getColumn() == 1) {
int rowCount = tablePanel.model.getRowCount();
for (int i = 0; i < rowCount; i++){
Object dataCol1 = tablePanel.model.getValueAt(i, 1);
//System.out.println("tttt" + dataCol1);
if ((Boolean)dataCol1) {
isARowChecked = true;
break;
}
else {
isARowChecked = false;
}
}
btnEnable.setEnabled(isARowChecked);
}
} // end changed listener
} // end main panel class
public static class TablePanel extends JPanel implements TableModelListener{
private JTable table;
JLabel busyLabel;
DefaultTableModel model;
int rowSelected=-1;
ArrayList rowsSelectedList = new ArrayList();
boolean somethingChkd = false;
Object[] columnNames = {"Col 0", "Col 1", "Col 2"};
Object[][] data = {};
public TablePanel(TableModelListener t) {//
model = new DefaultTableModel(data, columnNames);
table = new JTable(model) {
@Override
public Class getColumnClass(int column) {
switch (column) {
case 0:
return String.class;
case 1:
return Boolean.class;
default:
return String.class;
}
}
@Override
public boolean isCellEditable(int row,int cols){
if(cols==0 | cols == 2 ){return false;}
return true;
}
};
table.getModel().addTableModelListener(t);// t
table.setPreferredScrollableViewportSize(new Dimension(500, 170));
table.setFillsViewportHeight(true);
table.setRowSelectionAllowed(true);
table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
table.getTableHeader().setReorderingAllowed(false);
//Create the scroll pane and add the table to it.
JScrollPane scrollPane = new JScrollPane(table);
//Add the scroll pane to this panel.
add(scrollPane);
}//end constructor
public void setData(Object[][] objArray){
int rc = model.getRowCount();
for(int i = rc-1; i>=0 ; i--){
this.model.removeRow(i);
}
data = objArray.clone();
for(int i = 0; i < objArray.length;i++){
model.addRow(new Object[]{objArray[i][0], objArray[i][1], objArray[i][2]});
}
}
@Override
public void tableChanged(TableModelEvent e)
{
}// end table changed event
} // end TablePanelClass
public static void main(String[] args){
MyJTableDialog myJTD = new MyJTableDialog();
Object[][] objArr = {{"Row 0 Col 0",false,"Row 0 Col 2"},{"Row 1 Col 0",false,"Row 1 Col 2"},{"Row 2 Col 0",false,"Row 2 Col 2"}};
myJTD.mainPanel.tablePanel.setData(objArr);
myJTD.setVisible(true);
}
}