#java #swing #jtable #jbutton #jcheckbox
#java #swing #jtable #jbutton #jcheckbox
Вопрос:
Как я могу поместить JCheckbox
или a JButton
в определенную строку и столбец JTable
?
Ответ №1:
Не уверен насчет кнопки, но вот рабочий пример установки флажка:
import javax.swing.*;
import javax.swing.table.*;
public class Test {
public static void main(String [] args) throws Exception {
DefaultTableModel model = new DefaultTableModel(null, new String [] {"CheckMe", "Value"}) {
public Class getColumnClass(int c) {
switch (c) {
case 0: return Boolean.class;
default: return String.class;
}
} };
JTable table = new JTable(model);
JFrame frame = new JFrame("CheckBox Test");
frame.add(table);
model.addRow(new Object [] {true, "This is true"});
model.addRow(new Object [] {false, "This is false"});
frame.pack(); frame.validate();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
Ответ №2:
Как вы можете судить из ответа хачика, поддержка флажка обеспечивается таблицей, основанной на классе столбца столбца.
Однако, если вам нужен флажок только в определенной строке определенного столбца, тогда вам нужно переопределить методы getCellRenderer(…) и getCellEditor(…), чтобы вернуть средство визуализации / редактор для данной ячейки. Что-то вроде:
public TableCellEditor getCellEditor(int row, int column)
{
int modelColumn = convertColumnIndexToModel( column );
if (modelColumn == 1 amp;amp; row < 3)
return getDefaultEditor(Boolean.class);
else
return super.getCellEditor(row, column);
}
Ответ №3:
Для этого вам придется написать a TableCellRenderer
и a TableCellEditor
.
Вы можете использовать реализации swing по умолчанию, чтобы упростить это.
В каждом классе вам придется переопределить один метод этих интерфейсов и в нем проверить переданные аргументы row
и column
; если и строка, и столбец соответствуют вашим критериям, то верните JCheckBox
или a JButton
, в противном случае верните значение, JComponent
возвращенное super
реализацией (при использовании реализаций swing этих интерфейсов по умолчанию).