I have created JTable with TableModel in which I make column Product Id as editable. This jtable is shown when i click one cashMemoBtn and if i type product id in first row and hit enter key then it is adding new empty row to jtable. But my problem is when new Empty row is added then Product Id Cell should have blicking cursor like we see in any editor OR in textfield.
I have attached my expected output screenshot here
In image you can see vertical bar which is indicating current focus but i want it should be automatic for all new rows when i add new rows.
I tried with
jTable.setEditingColumn(1);
jTable.setEditingRow(0);
But is not working as per my requirement. Please help.
Thanks in advance.
After you add the empty row of data to the table you then need to start editing on the desired cell.
The basic code would be:
if (table.editCellAt(row, 1))
{
Component editor = table.getEditorComponent();
editor.requestFocusInWindow();
}
Related
I have a JTable and I intend to add a row each time the Tab button is pressed whilst the cell that corresponds to the last row and the last column has focus. The code on Netbeans is as follows
private void tblReplenishKeyPressed(java.awt.event.KeyEvent evt) {
if(evt.getKeyCode()==KeyEvent.VK_TAB ){
int rows = tblReplenish.getRowCount()-1;
int columns = tblReplenish.getColumnCount()-1;
if(tblReplenish.getSelectedRow()==rows && tblReplenish.getSelectedColumn()==columns){
model.addRow(new Object[]{});
}
if(tblReplenish.getSelectedColumn()==0){
String code = model.getValueAt(tblReplenish.getSelectedRow(), 0).toString();
model.setValueAt(supplier.get(code), tblReplenish.getSelectedRow(), 1);
}
}
}
The only problem is that if the Tab button is pressed soon after editing whilst the cursor is still blinking inside the last cell at the bottom, no row is added but focus is given to the cell that corresponds to row 1 and column 1. Any help will be appreciated as I am new to java
The problem is you added the KeyListener to the table, but focus in on the text field when you edit a cell so your listener code is not invoked. You should NOT be using a KeyListener
All Swing components use Key Bindings to bind a KeyStroke to an Action. So you need to replace the default Tab Action with a custom Action of your own.
You can also check out Table Tabbing which provides a simple API that allows you to use the default Tab Action and add some custom code.
I have a JTable whose every cell contains a JList. What I want to do is to make that table editable so that every item on the JList can be edited either using a JTextfield or Choosing an item from another List whenever the user right clicks on that list item in a particular table cell. I also want 2 of my table column need to be set uneditable. Here is a picture of my JTable. I want the every cell and every JList item on that cell to be editable leaving the 'Batch' and 'Break' column to be uneditable.
P.S. I don't want any spoon fed code. I just want an idea how it can be done. And I'll be really grateful if you can reference me some link on the web where I can read to learn how this type of problems can be solved. Thank you..!
enter image description here
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.
I have a JavaFX TableView with some columns and some rows. Each column has a custom TableCell to be edited, for example: some columns use text fields, some others use check boxes, choice boxes and so on.
What I want is to edit several cells (simultaneously) in the same column by doing the following:
Select some rows in the TableView.
Click on a cell using the right mouse button.
A context menu is shown with the option "Edit All"; choose it.
Somehow I edit one of those cells and every cell in the same column whose row is selected commits the same value.
What I want to know is whether it is possible for every cell to “commitEdit” the same value. I cannot find the way of doing it.
Thanks in advance.
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);