2014-09-20 2 views
1

Как можно использовать компоненты как содержимое ячейки, а не только строку, логическое и целое число.Используйте компоненты в ячейке таблицы, а не только строки

String[] petStrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" }; 
String[] columnNames = {"name", "elem"}; 
Object[][] data = { 
    {"button", new JButton("test")}, 
    {"select", new JComboBox(petStrings)} 
}; 

JTable table = new JTable(data, columnNames); 

Теперь я не могу увидеть кнопку, и выпадающий в таблице, только javax.swing.JComboBox...

Может быть, я должен продлить JTable так или иначе, но я понятия не имею, как это сделать.

+0

См [Как использовать таблицы] (Http: // docs.oracle.com/javase/tutorial/uiswing/components/table.html). Существует раздел [Использование Combo Box в качестве редактора] (http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#combobox) –

ответ

2

Прочитать JTable tutorial. Поймите, что вы уже используете компоненты сорта внутри ячеек JTable. При отображении JTable является рендерингом TableCellRenderer, объект, который должен возвращать компонент, который отображается каждой ячейкой. Когда ячейка редактируется, JTable будет отображать (обычно) другой объект, компонент, созданный TableCellEditor. Затем ваша работа заключается в том, чтобы изменить визуализатор и редактор вашей таблицы в зависимости от вашей потребности, шаги которых слишком велики, чтобы просто показать этот ответ. Опять же, учебники покажут вам путь.

Обратите внимание, что независимо от того, какой маршрут вы принимаете в своем решении, средство визуализации ячеек JTable не будет отображать какие-либо фактические компоненты, а скорее будет отображать визуализации компонента, и это большая разница. Редактор ячейки, однако, будет показать фактический компонент, но только тогда, когда ячейка находится в процессе редактирования.

В секунду в сторону, таблица используется в качестве табличного представления данных, и обычно, один и тот же тип данных отображается в каждом столбце, так что вы должны были бы сделать сильный аргумент, чтобы убедить мне нужно, чтобы один столбец JTable отображал JButton, а в других случаях JComboBox.

Например, чтобы редактор одного столбца JTable показывает поле со списком, вы можете установить его редактор ячейки по умолчанию использовать выпадающие как так:

String[] petStrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" }; 
    JComboBox<String> petCombo = new JComboBox<>(petStrings); 
    String[] columnNames = {"name", "elem"}; 
    Object[][] data = { 
     {"Pet 1", null}, 
     {"Pet 2", null} 
    }; 

    DefaultTableModel model = new DefaultTableModel(data, columnNames); 
    JTable table = new JTable(model); 
    table.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(petCombo)); 
+0

Спасибо. Но как можно установить другой редактор ячеек в первой и второй строках? –

+0

@IterAtor: создайте свой собственный редактор ячеек. Это займет немного работы, и для меня, как правило, не стоит усилий. Для чего вы это используете? Почему в одном столбце есть разные компоненты? В чем же необходимость? –

+0

@IterAtor: тогда вам лучше всего прочитать [tutorial] (http://docs.oracle.com/javase/tutorial/uiswing/components/table.html) и дать ему уйти. –

Смежные вопросы