私は1つのJtableを持っており、列にレンダリングされた割り当てを割り当てています。ここで、特定のセルを 2 つの部分に分割して、2 つの値を提供できるようにしたいと考えています。分割は、Cellrenderer を介して行うことも、他の方法で行うこともできます。
質問する
1390 次
1 に答える
1
GridLayoutをセル レンダラーとして使用JPanel
します。
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus,int row,int col) {
if (isSplitted(value) {
JPanel panel = new JPanel(new GridLayout(1,2));
JLabel left = new JLabel(getLeft(value));
JLabel right = new JLabel(getRight(value));
panel.add(left);
panel.add(right);
return panel;
} else {
return super.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, col)
}
}
ここgetLeft
、getRight
およびisSplitted
は、そのセルにレンダリングする値を定義するのはあなた次第です。
理にかなっている場合は、このパネルのインスタンスを 2 つのラベルで保持するように最適化することもできます。必要なコンテンツを設定すると、すべての呼び出しで再利用できます。左右のコンポーネントのサイズが大きく異なる場合は、BorderLayout の方が適切に機能する可能性があります。
同様に、セル エディターを提供することもできますが、必要なだけ編集することはできJTextField
ませJLabel
ん。AbstractCellEditorから派生し、(getCellEditorValue
パネルから構成された値を返す) およびgetTableCellEditorComponent
(フィールドを現在の値に設定した後にパネル自体を返す) をオーバーライドします。
@Stiflerが私の回答にコメントしました:
public Component getTableCellRendererComponent(JTable table, Object obj,
boolean isSelected, boolean hasFocus, int row, int column) {
Component cell = super.getTableCellRendererComponent(
table, obj, isSelected, hasFocus, row, column);
JPanel panel = new JPanel(new GridLayout(1, 2));
if ("History".equals(obj)) {
JTextField left = new JTextField("Left");
left.setEditable(true);
JTextField right = new JTextField("Right");
left.setEditable(true);
panel.add(left);
panel.add(right);
return panel;
}
return cell;
}
于 2013-06-20T06:37:19.890 に答える