TableCellRenderer
- A TableCellRenderer สร้างส่วนประกอบที่แสดงค่าของ JTable เซลล์
- ตัวแสดงเริ่มต้นใช้ JLabel เพื่อแสดงค่าของแต่ละเซลล์ตาราง
- ตัว TableCellRenderer สามารถระบุอินเทอร์เฟซได้สองวิธี:ตามคลาสของวัตถุที่จะแสดงผลโดยใช้ table.setDefaultRenderer() เมธอดและตามคอลัมน์โดยใช้ tableColumn.setCellRenderer() เมธอดและ tableColumn.setHeaderRenderer() เมธอดสำหรับส่วนหัวของคอลัมน์เฉพาะ
- ตัว TableCellRenderer อินเทอร์เฟซมีเพียงหนึ่งเมธอด getTableCellRendererComponent() และวิธีนี้สามารถส่งคืนองค์ประกอบการแสดงผลที่แตกต่างกันตามค่า เซลล์ที่มีโฟกัสหรือถูกเลือก แถวและคอลัมน์ที่สามารถมีค่าได้
TableCellEditor
- A TableCellEditor เป็นอินเทอร์เฟซและโดยค่าเริ่มต้น เซลล์สามารถแก้ไขได้
- A TableCellEditor สามารถกำหนดได้โดยการเรียก isCellEditable() วิธีการของ TableModel .
- ถ้าคลาสของค่าเซลล์เป็นบูลีน คุณสามารถใช้ 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(); } }
ผลลัพธ์