タイトルが示唆するように、私は行のクラスを変更する方法を理解しようとしていますが、具体的には、すべての行ではなく特定の行のクラスを変更しようとしています。私が見つけることができるのは、列のクラスを変更する方法だけです。JTable変更行クラス
特定の行のクラスを調整する方法がわかりません。誰かが正しい方向に私を指すことができれば、それは非常に感謝されます。
タイトルが示唆するように、私は行のクラスを変更する方法を理解しようとしていますが、具体的には、すべての行ではなく特定の行のクラスを変更しようとしています。私が見つけることができるのは、列のクラスを変更する方法だけです。JTable変更行クラス
特定の行のクラスを調整する方法がわかりません。誰かが正しい方向に私を指すことができれば、それは非常に感謝されます。
これは私がそれに近づくだろうかです:
public class TableRenderer {
interface ComponentTextSetter<T> {
void setText(String value, T component);
}
private static final Map<Component, ComponentTextSetter> components = new HashMap() {
{
put(new JLabel(), (ComponentTextSetter<JLabel>) (value, component) -> component.setText(value));
put(new JTextField(),
(ComponentTextSetter<JTextField>) (value, component) -> component.setText(value));
put(new JComboBox<>(), (ComponentTextSetter<JComboBox>) (value, component) -> {
component.addItem(value);
component.setSelectedItem(value);
});
}
};
private static TableCellRenderer renderer = new DefaultTableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
Component jComponent = new ArrayList<>(components.keySet()).get(row % components.size());
components.get(jComponent).setText(value.toString(), jComponent);
return jComponent;
}
};
public static void main(String[] args) {
TableModel tableModel = new DefaultTableModel(10, 3) {
@Override
public Object getValueAt(int arg0, int arg1) {
return "value" + new Random().nextInt(4);
}
};
JTable jTable = new JTable(tableModel);
jTable.setDefaultRenderer(Object.class, renderer);
JOptionPane.showMessageDialog(null, jTable);
}
}
レンダラーは、モデル値を設定、変更、変更するのに適切な場所ではありません。モデルは – mKorbel
@mKorbelに指定されています。どのラインでレンダラーが値を正確に変更しますか? –
私は行に応じて、表示コンポーネントを変更 'CellRenderer'を作成する以外にどんな解決策が表示されない...私が何であったかだ –
@TimothyTruckle考え方も変わっていませんが、私はその方法を踏襲し、列全体のクラスを変更せずにクラスを変更する方法を見つけることができないようです。 –
なぜあなたは行のクラスを望んでいるのか、文脈は何ですか? –