Start editing in a cell in JTable on gaining focus

后端 未结 2 586
执笔经年
执笔经年 2021-01-15 06:39

I have defined cell editors for the two columns in my table in the following manner:

Java Code:

JComboBox combo = new JComboBox();
//code to add item         


        
相关标签:
2条回答
  • 2021-01-15 06:59
    1. This example overrides editCellAt() in a JTable having a DefaultCellEditor using JTextField.

    2. You can bind the Space key to the startEditing action defined for JTable:

      table.getInputMap().put(
          KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0), "startEditing");
      
    0 讨论(0)
  • 2021-01-15 07:01

    As commented above, you can use JComboBox both as renderer and editor. Below is a very basic example. It also shows DefaultCellEditor.setClickCountToStart() usage.

    import java.awt.Component;
    import javax.swing.DefaultCellEditor;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.JTextField;
    import javax.swing.SwingUtilities;
    import javax.swing.table.TableCellRenderer;
    import javax.swing.table.TableColumn;
    
    public class ComboBoxEditorDemo {
    
        public static void main(String args[]) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    createAndShowGUI();
                }
            });
        }
    
        private static void createAndShowGUI() {
            JFrame frame = new JFrame("ComboBoxEditorDemo");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            JTable table = new JTable(
                    new Object[][] { { "1", "2" }, { "1", "2" } }, 
                    new Object[] {"Col1", "Col2" });
    
            table.setRowHeight(24);
    
            TableColumn column = table.getColumnModel().getColumn(1);
            column.setCellRenderer(new MyComboBoxRenderer(new String[] { "1", "2", "3" }));
            column.setCellEditor(new MyComboBoxEditor(new String[] { "1", "2", "3" }));
    
            DefaultCellEditor editor = new DefaultCellEditor(new JTextField());
            editor.setClickCountToStart(1);
            column = table.getColumnModel().getColumn(0);
            column.setCellEditor(editor);
    
            JScrollPane scrollPane = new JScrollPane(table);
            frame.add(scrollPane);
            frame.pack();
            frame.setVisible(true);
        }
    
        static class MyComboBoxRenderer extends JComboBox implements
                TableCellRenderer {
            public MyComboBoxRenderer(String[] items) {
                super(items);
            }
    
            public Component getTableCellRendererComponent(JTable table,
                    Object value, boolean isSelected, boolean hasFocus, int row,
                    int column) {
                if (isSelected) {
                    setForeground(table.getSelectionForeground());
                    super.setBackground(table.getSelectionBackground());
                } else {
                    setForeground(table.getForeground());
                    setBackground(table.getBackground());
                }
    
                setSelectedItem(value);
                return this;
            }
        }
    
        static class MyComboBoxEditor extends DefaultCellEditor {
            public MyComboBoxEditor(String[] items) {
                super(new JComboBox(items));
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题