Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaのTableCellRendererとTableCellEditorの違いは何ですか?


TableCellRenderer

  • TableCellRenderer JTableの値を表示するコンポーネントを作成します セル。
  • デフォルトのレンダラーはJLabelを使用します 各テーブルセルの値を表示します。
  • TableCellRenderer インターフェイスは2つの方法で指定できます。table.setDefaultRenderer()を使用してレンダリングされるオブジェクトのクラス別 メソッドとtableColumn.setCellRenderer()を使用した列による メソッドとtableColumn.setHeaderRenderer() 特定の列ヘッダーのメソッド。
  • TableCellRenderer インターフェイスにはメソッドが1つだけありますgetTableCellRendererComponent() このメソッドは、値に基づいてさまざまなレンダリングコンポーネントを返すことができます。セルにはフォーカスがあるか、選択されています。行と列には値を含めることができます。

TableCellEditor

  • TableCellEditor はインターフェースであり、デフォルトではセルを編集できます。
  • TableCellEditor isCellEditable()を呼び出すことで判別できます TableModelのメソッド 。
  • セル値のクラスがブール値の場合、JCheckBoxを使用できます。ダブルクリックして編集モードにする必要がある場合は、JTextFieldを使用できます。
  • TableCellEditor インターフェイスにはgetTableCellEditorComponentメソッドが1つだけあります () このメソッドは、値に基づいてさまざまな編集コンポーネントを返すことができます。セルが選択され、値を含むことができる行と列が表示されます。

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の違いは何ですか?


  1. JavaのJFrameとJDialogの違いは何ですか?

    JFrame フレームに追加されたコンポーネントはそのコンテンツと呼ばれ、 contentPaneによって管理されます。 。 JFrameにコンポーネントを追加するには 、 contentPaneを使用する必要があります 代わりに。 JFrame タイトルのウィンドウが含まれています 、境界線 、(オプション)メニュー バー およびユーザー -指定 コンポーネント 。 JFrame 移動できます 、サイズ変更 、アイコン化 JComponentのサブクラスではありません 。 デフォルトでは、JFrameは左上の角に表示されます 画面のr。指定した場所にフレームを表示するには

  2. JavaのGridLayoutとGridBagLayoutの違いは何ですか?

    GridLayout すべてのコンポーネントを長方形のグリッドに配置し、同じサイズの長方形に分割します 各コンポーネントは長方形の中に配置されますが、 GridBagLayout 柔軟です レイアウト マネージャー コンポーネントを垂直方向と水平方向に整列させます コンポーネントが同じサイズである必要はありません。各GridBagLayout オブジェクトは、動的な長方形のセルのグリッドを維持します 各コンポーネントがコンポーネントと呼ばれる1つ以上のセルを占有します 表示 エリア 。 GridLayout GridLayout コンポーネントを長方形のグリッドに配置します。セル