Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

TableCellRenderer และ TableCellEditor ใน Java แตกต่างกันอย่างไร


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();
   }
}

ผลลัพธ์

TableCellRenderer และ TableCellEditor ใน Java แตกต่างกันอย่างไร