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のJFrameとJDialogの違いは何ですか?
JFrame フレームに追加されたコンポーネントはそのコンテンツと呼ばれ、 contentPaneによって管理されます。 。 JFrameにコンポーネントを追加するには 、 contentPaneを使用する必要があります 代わりに。 JFrame タイトルのウィンドウが含まれています 、境界線 、(オプション)メニュー バー およびユーザー -指定 コンポーネント 。 JFrame 移動できます 、サイズ変更 、アイコン化 JComponentのサブクラスではありません 。 デフォルトでは、JFrameは左上の角に表示されます 画面のr。指定した場所にフレームを表示するには
-
JavaのGridLayoutとGridBagLayoutの違いは何ですか?
GridLayout すべてのコンポーネントを長方形のグリッドに配置し、同じサイズの長方形に分割します 各コンポーネントは長方形の中に配置されますが、 GridBagLayout 柔軟です レイアウト マネージャー コンポーネントを垂直方向と水平方向に整列させます コンポーネントが同じサイズである必要はありません。各GridBagLayout オブジェクトは、動的な長方形のセルのグリッドを維持します 各コンポーネントがコンポーネントと呼ばれる1つ以上のセルを占有します 表示 エリア 。 GridLayout GridLayout コンポーネントを長方形のグリッドに配置します。セル