Mohammed Hamdoon
Mohammed Hamdoon

Reputation: 49

Adding JComboBox to JTable

I'm creating a JTable in Java & I'm asked to add to the table a JCheckBox, JButton and a JComboBox. The table that I created is displaying all the information, the button is working fine and the JCheckBox is also working, the problem I'm facing is that the JComboBox is not working. I really can't figure out why. I've tried to look the problem up but I can't figure it out. Can someone help me please?

The code:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public class sinX extends JFrame {
private JTable table;
private DefaultTableModel model;
private Object[][] data;
private String[] columnNames;
private JButton button;
JComboBox comboBox;
    public sinX() {
    comboBox = new JComboBox();
    setTitle("Programming Languages");
    data = new Object[][]{{"C","Dennis Ritchie",1972,false},{"C++","Bjarne Stroustrup",1983,true},
            {"Python","Guido van Rossum",1991,false},{"Java","James Gosling",1995,true},{
            "JavaScript","Brendan Eich",1995,true},{"C#","Anders Hejlsberg",2001,false},
            {"Scala","Martin Odersky",2003,true}};
    columnNames = new String[] {"Language","Author","Year","Check Box"};
    //model = new DefaultTableModel(data, columnNames);
    //table = new JTable(model);
    //table.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
    final Class[] columnClass = new Class[] {
            String.class, String.class, Integer.class, Boolean.class
    };
    //create table model with data
    DefaultTableModel model = new DefaultTableModel(data, columnNames) {
        @Override
        public boolean isCellEditable(int row, int column)
        {
            return false;
        }
        @Override
        public Class<?> getColumnClass(int columnIndex)
        {
            return columnClass[columnIndex];
        }
    };
    table = new JTable(model);
    table.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
    button = new JButton("Remove");
    button.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent ae) {
            // check for selected row first
            if(table.getSelectedRow() != -1) {
                // remove selected row from the model
                model.removeRow(table.getSelectedRow());
                JOptionPane.showMessageDialog(null, "Selected row deleted successfully");
            }
        }
    });
    TableColumn year = table.getColumnModel().getColumn(2);
    comboBox.addItem("A");
    comboBox.addItem("B");
    comboBox.addItem("C");
    comboBox.addItem("D");
    year.setCellEditor(new DefaultCellEditor(comboBox));
    add(new JScrollPane(table), BorderLayout.CENTER);
    add(button, BorderLayout.SOUTH);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(600, 500);
    setLocationRelativeTo(null);
    setVisible(true);
}
public static void main(String args[]) {
    new sinX();
}
}

Upvotes: 0

Views: 577

Answers (1)

camickr
camickr

Reputation: 324118

the problem I'm facing is that the JComboBox is not working.

year.setCellEditor(new DefaultCellEditor(comboBox));

The above code indicates you are trying to use a combo box as an editor for the given column.

public boolean isCellEditable(int row, int column)
{
    return false;
}

However, you have stated in your model that none of columns are editable.

You need to return true for any column where you want to edit the data.

the JCheckBox is also working

Not really. Yes you see the boolean value is rendered as a check box. However, you can't change its value by clicking on it, unless of course you return true for that column as well.

Upvotes: 2

Related Questions