Selecting item on JComboBox contained on a cell of JTable - java

I have created a JComboBox and I am using it on a column of a JTable - see code below.
Object[] items = {"1", "2", "3", "4"};
JComboBox comboBox = new JComboBox(items);
comboBox.setRenderer(new customComboBoxRenderer());
myTable.getColumnModel().getColumn(Table.CONF_COL).setCellEditor(new DefaultCellEditor(comboBox));
Now, my problem is that I cannot find a way to make each combo box in the column of the table with the combo boxes to have an initial value (might be different on each combo box) which will also be the selected item of the particular combo box when the program starts.
I think the problem is being created because the JTable is using only one JComboBox instance for all the cells of the column and therefore I can never get a different instance of combo box for each of the cells on the column and set the selected item to them.
Any help would be really appreciated.
Many thanks,
Soc

read Oracle tutorial How to use Tables - Using a Combo Box as an Editor for working code example
everything depends of value stored in DefaultComboBoxModel, in your case I'd be store Integer not String value for JComboBoxes model
value stored in XxxTableModel representing selected or inital value in JComboBox as TableCellEditor,
there you can store Integer value too, to avoiding any parsing between String and Integer
simple use (JTable or XxxTableModel).setValueAt to display desired value in JTable (painted by TableCellRenderer)
more info about TableCellRenderer and TableCellEditor in Oracle tutorial

In your customComboBoxRenderer
call setSelectedItem(same type as your jcombobox elements, in this case String)
inside your
getTableCellRendererComponent(.. ) method

Related

AutoCompleteDecorator.decorate(combobox); is not working perfectly in JTable

I'm using A JCombobox with editable = true in a JPanel and using a JTable in the same panel with a column that is set to show combobox as its field type. I applied
AutoCompleteDecorator.decorate(cb);
to JCombobox that is outside the JTable and its working perfectly But when I applied the same line of code to combobox within jtable which selects the first occurrence of the data that match the key typed.
How can I resolve this issue. Any Suggestion ?
Look at the image below in which the exact item is selected that I typed.
And this is the image of combobox within JTable.
When I press w key it select the first occurrence windy and set it in the cell.
You haven't posted a code, but have you checked which TableCellEditor you use?
You might have used DefaultTableCellEditor. Change it to ComboBoxCellEditor if that's the case.
example:
JCombobox cmbItems = new JComboBox();
cmbItems.addItem("choice1");
cmbItems.addItem("choice2");
cmbItems.addItem("choice3");
AutoCompleteDecorator.decorate(cmbItems);
TableColumn colWithCmb = table.getColumnModel().getColumn(0);
colWithCmb.setCellEditor(new ComboBoxCellEditor(cmbItems));

Displaying just one value in JComboBox when one is selected

Hello :) I need help with changing a JComboBox in a JTable. I'm new to GUI-Programming and Swing and couldn't solve this problem: I have to change the behavior of a JComboBox.
You can see the ComboBox in the picture below. If "Ja" is selected there should just be "Nein" as an option and the other way around. It would also be cool if "Nein" is set per default. The code was written from one student from last semester and I have difficulties to adjust the combobox like I have to.
That's the code snippet where the ComboBox gets initialized.
optionsInteger = new JComboBox<String>();
optionsInteger.addItem("Ja");
optionsInteger.addItem("Nein");
optionsInteger.setSelectedItem(optionsInteger.getItemAt(0));
optionsInteger.setSelectedIndex(1);
optionsInteger.setName("optionsInteger");
The ComboBox gets inserted to a JTable in this method:
public void repaintXTable(DefaultTableModel model,JTable table, int xAmount, JScrollPane scrollPane,
JComboBox<String> optionsInteger) {
model.setRowCount(xAmount);
th = table.getTableHeader();
tcm = th.getColumnModel();
tcs = tcm.getColumns();
tcs.nextElement().setHeaderValue("");
tcs.nextElement().setHeaderValue("Lower");
tcs.nextElement().setHeaderValue("Upper");
tc = tcs.nextElement();
tc.setHeaderValue("Integer");
tc.setCellEditor(new DefaultCellEditor(optionsInteger));
for(int i=0;i<xAmount;i++)
{
model.setValueAt("X"+(i+1), i, 0);
}
}
Thank you very much for your help.
In your code, this line
optionsInteger.setSelectedItem(optionsInteger.getItemAt(0));
sets the default selection to the zeroth element (Ja). This line
optionsInteger.setSelectedIndex(1);
sets the default selection to the first element (Nein).
Either set the selected item or the selected index. There's no need to do both.
A JComboBox does not remove the selected element by default. If the selected element is removed, how would the selected element display in your JTable?
If you really want to do this, you'll have to create your own version of a JComboBox.
. If "Ja" is selected there should just be "Nein" as an option and the other way around.
So then you need two separate ComboBoxModels, one model containing "Nein" and the other containing "Ja". Then when you start to edit the cell you check the current value and use the model containing the other value.
Check out How to add unique JComboBoxes to a column in a JTable (Java). This example shows how you can dynamically change the model at the time the cell is about to be edited.
It would also be cool if "Nein" is set per default.
This has nothing to do with the editor. You just add "Nein" to the TableModel when you add the data to the model.

Java Swing : get index of combobox inside table

I need to have combo boxes (JComboBox) in the first column of JTable.
JTable table = new JTable(5,10);
JCheckBox checkbox = new JCheckBox();
table.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(comboBox));
Now, how can I get selected index of combo box in a certain cell ?
table.getModel().getValueAt(i, 0) returns a String. That's not what I need.
Why don't you use checkbox.getSelectedIndex()? If you declare checkbox in different cells they will all contain a copy of the same. So if you want different comboboxes in different cells you should declare them all with different names. And then you get the selected index like I said before.
The way all this works under the covers is that the JComboBox is treated as a simple delegate editor and the value of the JComboBox is what's kept in the table, not the JComboBox instance (otherwise you'd need an instance per cell). (You can read the gory details in the source)
What this means is that all that's available to you from the JTable is the currently selected value, which will be of type of the parameterized type E in JComboBox<E>, in your case, evidently, a String.
If you want to get the index of a particular value, you need to pull it using the ComboBoxModel<E> backing your JComboBox<E> -- if you've implemented your own ComboBoxModel<E> you'll have to implement your own method, but assuming you've used the default (DefaultComboBoxModel<E>), you can do something like:
int index = ((DefaultComboBoxModel<String>) comboBox.getModel()).getIndexOf(value)

Editable cell and growable Jtable Implementation

I have a JTable with Customized CellRenderer and CellEditor, Intially the table is loaded with
a list of values Say with 12 rows and 5 colums, I have a JTextField at the top of the table in which I applied KeyListener and made the Textfield to display like a JComboBox with a list of values as soon as first 3 characters typed in that field, eg. Typing 'met' will display all the medicine names starting with "met", now what I want to do is I have to Implement that Textfield into the Jtable's last row's 2nd column Say 13th row in the situation I mentioned above. and after selecting any 1 medicine from the list of displayed value the JTable could Add a row dynamically and insert a new row with that search textfield, Please Suggest me an Idea and Code for this, also guide me how to apply cellrenderer and celleditor for a particular cell(Cell which contains the dynamic search textfield)...
Thanks a lot in Advance :)
Kindly let us assume jTable2 be your JTable variable name and TextField be your JTextField variable name. Then use the following code with the keylisterner of the text field to get what is wanted:-
javax.swing.table.DefaultTableModel dft= (javax.swing.table.DefaultTableModel)
jTable2.getModel();
jTable2.setModel(dft);
dft.addRow(new Object[1]);
jTable2.setValueAt(TextField.getText(),jTable2.getRowCount()-1,1);

creating comboboxes inside jtable

My aim is to provide an interface like a matrix, each cell in matrix will have 2 values and user will select best among the two.
So i thought of going for jTable and combo boxes, the problem is in my matrix the value of each cell in a column is different. But the following code that adds the combo box to whole column of the table and if i change the combo box value, it changes for the whole table. How to insert combo boxes into the table such that each one has different values
javax.swing.JComboBox k = new javax.swing.JComboBox();
k.addItem("1");
k.addItem("2");
k.addItem("3");
k.setEnabled(true);
k.setVisible(true);
this.jTable1.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(k));
I also tried with DefaultTableModel
code is
DefaultTableModel t =new javax.swing.table.DefaultTableModel();
t.setColumnCount(10);
t.setRowCount(10);
t.setValueAt(k, 0, 0);
jTable1.setModel(t);
but i get the output in the gui as
javax.swing.JComboBox[,0,0,0x0,invalid,layout=javax.swing.plaf.metal.MetalComboBoxUI$MetalComboBoxLayoutManager,alignmentX=0.0,alignmentY=0.0,border=,flags=16777544,maximumSize=,minimumSize=,preferredSize=,isEditable=false,lightWeightPopupEnabled=true,maximumRowCount=8,selectedItemReminder=1]
I tried typecasting "k" as JComboBox and JComponent in setValueAt method, which didn't work
Someone please help
Override the getCellEditor(....) method. For example: How to add unique JComboBoxes to a column in a JTable (Java)

Categories

Resources