JTable JComponent 의 하위 클래스입니다. 여러 행과 열에 정보가 표시되는 테이블을 만드는 데 사용할 수 있습니다. . JTable에서 값을 선택하면 TableModelEvent TableModelListener 를 구현하여 처리됩니다. 상호 작용. DefaultTableModel 에서 코드를 사용자 정의하여 JTable 셀에 JButton을 추가하거나 삽입할 수 있습니다. 또는 AbstractTableModel T를 구현하여 코드를 맞춤설정할 수도 있습니다. ableCellRenderer 인터페이스 및 getTableCellRendererComponent() 재정의 필요 방법.
예시
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; public class JTableButtonTest extends JFrame { private JTable table; private JScrollPane scrollPane; public JTableButtonTest() { setTitle("JTableButton Test"); TableCellRenderer tableRenderer; table = new JTable(new JTableButtonModel()); tableRenderer = table.getDefaultRenderer(JButton.class); table.setDefaultRenderer(JButton.class, new JTableButtonRenderer(tableRenderer)); scrollPane = new JScrollPane(table); add(scrollPane, BorderLayout.CENTER); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); setSize(400, 300); setVisible(true); } public static void main(String[] args) { new JTableButtonTest(); } } class JTableButtonRenderer implements TableCellRenderer { private TableCellRenderer defaultRenderer; public JTableButtonRenderer(TableCellRenderer renderer) { defaultRenderer = renderer; } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if(value instanceof Component) return (Component)value; return defaultRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); } } class JTableButtonModel extends AbstractTableModel { private Object[][] rows = {{"Button1", new JButton("Button1")},{"Button2", new JButton("Button2")},{"Button3", new JButton("Button3")}, {"Button4", new JButton("Button4")}}; private String[] columns = {"Count", "Buttons"}; public String getColumnName(int column) { return columns[column]; } public int getRowCount() { return rows.length; } public int getColumnCount() { return columns.length; } public Object getValueAt(int row, int column) { return rows[row][column]; } public boolean isCellEditable(int row, int column) { return false; } public Class getColumnClass(int column) { return getValueAt(0, column).getClass(); } }
출력