TableCellRenderer
- TableCellRenderer JTable 값을 표시하는 구성 요소를 만듭니다. 세포.
- 기본 렌더러는 JLabel 을 사용합니다. 각 테이블 셀의 값을 표시합니다.
- TableCellRenderer 인터페이스는 두 가지 방법으로 지정할 수 있습니다. table.setDefaultRenderer() 를 사용하여 렌더링할 개체의 클래스별 메소드 및 tableColumn.setCellRenderer()를 사용하는 열별 메소드 및 tableColumn.setHeaderRenderer() 특정 열 헤더에 대한 메서드입니다.
- TableCellRenderer 인터페이스에는 getTableCellRendererComponent() 메서드가 하나만 있습니다. 이 메서드는 값을 기반으로 다른 렌더링 구성 요소를 반환할 수 있습니다. 셀에 포커스가 있거나 선택되어 있고, 값을 포함할 수 있는 행과 열이 있습니다.
TableCellEditor
- TableCellEditor 인터페이스이며 기본적으로 셀을 편집할 수 있습니다.
- TableCellEditor isCellEditable()을 호출하여 결정할 수 있습니다. TableModel 메서드 .
- 셀 값의 클래스가 Boolean인 경우 JCheckBox를 사용할 수 있습니다. 편집 모드로 전환하려면 두 번 클릭해야 하는 경우 JTextField를 사용할 수 있습니다.
- TableCellEditor 인터페이스에는 getTableCellEditorComponent 메서드가 하나만 있습니다. () 이 메서드는 값에 따라 다른 편집 구성 요소를 반환할 수 있습니다. 셀이 선택되고 값을 포함할 수 있는 행과 열이 선택됩니다.
예
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; public class TableCellRendererEditorTest extends JFrame { private JTable table; public TableCellRendererEditorTest() { setTitle("TableCellRendererEditor Test"); DefaultTableModel dtm = new DefaultTableModel() { public boolean isCellEditable(int row, int column) { return !(column == 0); } }; dtm.setDataVector(new Object[][]{{"Table Cell Renderer", "Table Cell Editor"}, {"Table Cell Renderer","Table Cell Editor"}}, new Object[]{"Renderer","Editor"}); table = new JTable(dtm); table.getColumn("Editor").setCellRenderer(new TextAreaRenderer()); table.getColumn("Editor").setCellEditor(new TextAreaEditor()); table.setRowHeight(80); JScrollPane spane = new JScrollPane(table); add(spane); setSize(400, 275); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); setVisible(true); } public static void main(String[] args) { new TableCellRendererEditorTest(); } } class TextAreaRenderer extends JScrollPane implements TableCellRenderer { JTextArea textarea; public TextAreaRenderer() { textarea = new JTextArea(); textarea.setLineWrap(true); textarea.setWrapStyleWord(true); getViewport().add(textarea); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,int row, int column) { if (isSelected) { setForeground(table.getSelectionForeground()); setBackground(table.getSelectionBackground()); textarea.setForeground(table.getSelectionForeground()); textarea.setBackground(table.getSelectionBackground()); } else { setForeground(table.getForeground()); setBackground(table.getBackground()); textarea.setForeground(table.getForeground()); textarea.setBackground(table.getBackground()); } textarea.setText((String) value); textarea.setCaretPosition(0); return this; } } class TextAreaEditor extends DefaultCellEditor { protected JScrollPane scrollpane; protected JTextArea textarea; public TextAreaEditor() { super(new JCheckBox()); scrollpane = new JScrollPane(); textarea = new JTextArea(); textarea.setLineWrap(true); textarea.setWrapStyleWord(true); scrollpane.getViewport().add(textarea); } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { textarea.setText((String) value); return scrollpane; } public Object getCellEditorValue() { return textarea.getText(); } }
출력