JTable
의 특정 행과 열에 JCheckbox
또는 JButton
을 어떻게 넣을 수 있습니까?어떻게 JCheckbox를 JTable에 둘 수 있습니까?
1
A
답변
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);
}
}
0
0
을, 당신은 TableCellRenderer
과 TableCellEditor
작성해야합니다.
기본 스윙 구현에서 쉽게 파생시킬 수 있습니다.
각 클래스에서 이러한 인터페이스의 한 가지 메소드를 재정의해야하며 전달 된 row
및 column
인수를 확인하십시오. 행과 열이 기준에 일치하는 경우 JCheckBox
또는 JButton
을 반환하고 그렇지 않으면 super
구현에 의해 반환 된 JComponent
을 반환합니다 (이러한 인터페이스의 기본 스윙 구현을 사용하는 경우).
1
khachik의 답변에서 알 수 있듯이 확인란의 지원은 열의 열 클래스를 기반으로하는 테이블에서 제공됩니다.
그러나 특정 열의 특정 행에만 확인란을 사용하려는 경우 getCellRenderer (...) 및 getCellEditor (...) 메서드를 재정 의하여 지정된 렌더러/편집기를 반환해야합니다. 세포. 다음과 같음 :
public TableCellEditor getCellEditor(int row, int column)
{
int modelColumn = convertColumnIndexToModel(column);
if (modelColumn == 1 && row < 3)
return getDefaultEditor(Boolean.class);
else
return super.getCellEditor(row, column);
}