2014-12-17 5 views
0

Я пытаюсь получить редактируемый JComboBox для работы внутри таблицы, но пока не повезло. Значение cbo.setEditable(true), похоже, не действует при работе внутри ячейки внутри таблицы. Есть что-то, чего я не хватает? Пожалуйста помоги.JTable JComboBox SetEditable не работает

Пример кода для демонстрации проблемы:

public class ComboBoxTest { 

    private JFrame frame; 
    private JTable table; 
    private JComboBox<?> cboFrm = null; 
    private JComboBox<?> cboTbl = null; 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) { 

     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        ComboBoxTest window = new ComboBoxTest(); 
        window.frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the application. 
    */ 
    public ComboBoxTest() { 
     initialise(); 
    } 

    /** 
    * Initialise the contents of the frame. 
    */ 
    private void initialise() { 
     frame = new JFrame(); 
     frame.setBounds(100, 100, 455, 233); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().setLayout(null); 

     String[] cboData = { "tspn", "tblspn", "gram", "Kg" }; 

     cboFrm = new JComboBox<String>(cboData); 
     cboFrm.setBounds(10, 26, 86, 20); 
     cboFrm.setEditable(true); 
     frame.getContentPane().add(cboFrm); 

     JScrollPane scrollPane = new JScrollPane(); 
     scrollPane.setBounds(10, 57, 414, 127); 
     frame.getContentPane().add(scrollPane); 

     String columnNames[] = { "Qty", "Measure", "Ingrediant" }; 
     // @formatter:off 
     Object[][] tableData = 
      { 
       { 1, "Kg", "Sugar" }, 
       { 1, "pinch", "Salt" }, 
       { 2, "handfuls", "Peanuts" }, 
       { 1, "Litre", "Milk"} 
      }; 
     // @formatter:on 
     table = new JTable(tableData, columnNames); 
     cboTbl = new JComboBox<String>(cboData); 
     cboTbl.setEditable(true); 
     table.getColumnModel().getColumn(1) 
       .setCellEditor(new DefaultCellEditor(cboTbl)); 
     scrollPane.setViewportView(table); 

    } 

} 
+3

Избегайте использование 'null' макетов, пиксельные совершенные макеты являются иллюзией в современном дизайне пользовательского интерфейса. Слишком много факторов, которые влияют на индивидуальный размер компонентов, ни один из которых вы не можете контролировать. Swing был разработан для работы с менеджерами компоновки в ядре, отбросив их, не будет конца проблем и проблем, которые вы будете тратить все больше времени на исправление. – MadProgrammer

+2

Хорошо работает для меня, можете ли вы описать свою реальную проблему и ваши ожидания. .. – MadProgrammer

+0

работает отлично для меня тоже. –

ответ

0

работал отлично для меня этот выход:

enter image description here

0

Для того, чтобы ответить на мой собственный вопрос.

Кажется, что ошибка JComboBox связана с JTable. Обходной путь - нажать «войти» после изменения нового текста. Включение таблицы JComboBox не работает, что несовместимо с поведением стандартной текстовой ячейки.

Существует сообщение об ошибке, появившееся в 1999-2001 годах, где оно якобы было исправлено, но оно снова всплыло. Обратитесь к следующей ссылке:

http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4275046