Computer >> Máy Tính >  >> Lập trình >> Java

Sự khác biệt giữa TableCellRenderer và TableCellEditor trong Java là gì?

TableCellRenderer

  • A TableCellRenderer tạo một thành phần hiển thị giá trị của JTable ô.
  • Trình kết xuất mặc định sử dụng JLabel để hiển thị giá trị của mỗi ô trong bảng.
  • TableCellRenderer giao diện có thể được chỉ định theo hai cách:Theo lớp của đối tượng sẽ được hiển thị bằng cách sử dụng table.setDefaultRenderer () và theo một cột bằng cách sử dụng tableColumn.setCellRenderer () tableColumn.setHeaderRenderer () cho một tiêu đề cột cụ thể.
  • TableCellRenderer giao diện chỉ có một phương thức getTableCellRendererComponent () và phương thức này có thể trả về các thành phần hiển thị khác nhau dựa trên giá trị, một ô có tiêu điểm hoặc được chọn, hàng và cột có thể chứa giá trị.

TableCellEditor

  • A TableCellEditor là một giao diện và theo mặc định, các ô có thể chỉnh sửa được.
  • A TableCellEditor có thể được xác định bằng cách gọi isCellEditable () phương pháp của TableModel .
  • Nếu lớp của một giá trị ô là Boolean, thì một JCheckBox có thể được sử dụng. Nếu phải nhấp đúp để chuyển sang chế độ chỉnh sửa, bạn có thể sử dụng JTextField.
  • TableCellEditor giao diện chỉ có một phương thức getTableCellEditorComponent () và phương thức này có thể trả về các thành phần chỉnh sửa khác nhau dựa trên giá trị, một ô được chọn, hàng và cột có thể chứa giá trị.

Ví dụ

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

Đầu ra

Sự khác biệt giữa TableCellRenderer và TableCellEditor trong Java là gì?