Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java의 TableCellRenderer와 TableCellEditor의 차이점은 무엇입니까?

<시간/>

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

출력

Java의 TableCellRenderer와 TableCellEditor의 차이점은 무엇입니까?