Hi! Hab ne Frage bezüglich JTables...
Hab da einen JTable, der besteht aus 2 Spalten und nun möchte ich dass in der Spalte2 verschiedene Datentypen drinstehen können. Beispiel:
Spalte1 | Spalte2
-----------------
Name: | Objektname // String
Pos X: | 50 // int
Pos Y: | 10 // int
Enable: | [x] // in dieser Zeile eine Checkbox im Sinne von True/False
Color: | *Button* // hier ein JButton der einen COlorchooser öffnet
Meine bisherige Lösung sieht so aus, dass ich statt einem JTable ein paar JTextFields nehme und dort alles als String auslese bzw. parse. Den Button für den ColorChooser hab ich extra, ebenso wie die Checkbox;
Jedoch denk ich mal dass ein JTable schöner aussehen würde :zwinker:
Auf den Java Tutorials über JTables hab ich lediglich gefunden, wie man einen DatenTyp für die gesamte Spalte bestimmt, nicht jedoch wenn mehrere Datentypen in dieser Spalte vorhanden sein sollen. Geht das überhaupt?
hab da so ein JTable mal zusammengeschustert :shinner:, doch offenbar weiss der Table nicht wie er den Button und die CheckBox behandeln soll und liefert lediglich einen String... Hat jemand ne Ahnung wie man das hinbiegen könnte?
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Font;
import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
public class DefaultCellEditorJTextFieldAlignment extends JFrame
{
DefaultTableModel model = new DefaultTableModel(new Object[][] {
{ "X", "0" },
{ "Y", "0" },
{ "Color", add(new JButton("huhu")) },
{"Enabled", add(new JCheckBox("bla",true))} },
new Object[] { "Property", "Value" })
{
public boolean isCellEditable(int row, int col)
{
// nur 2. column darf verändert werden
return col == 1;
}
};
public DefaultCellEditorJTextFieldAlignment()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTable table = new JTable(model);
table.setDefaultEditor(Object.class, new MyEditor());
table.setRowHeight(18);
table.setFont(new Font("Arial",Font.PLAIN,14));
TableColumn column = null;
for (int i = 0; i < 2; i++) {
column = table.getColumnModel().getColumn(i);
if (i == 0) {
column.setPreferredWidth(50);
} else {
column.setPreferredWidth(150);
}
}
getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
pack();
}
public static void main(String arg[])
{
new DefaultCellEditorJTextFieldAlignment().setVisible(true);
}
}
class MyEditor extends DefaultCellEditor
{
public MyEditor()
{
super(new JTextField());
setClickCountToStart(1);
}
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected,int row, int column)
{
JTextField editor = (JTextField) super.getTableCellEditorComponent(table, value, isSelected, row, column);
editor.setBorder(null);
editor.setFont(new Font("Arial",Font.PLAIN,14));
return editor;
}
public JButton getTableCellEditorComponent2(JTable table, Object value, boolean isSelected,int row, int column)
{
JButton button = (JButton) super.getTableCellEditorComponent(table, value, isSelected, row, column);
button.setFont(new Font("Arial",Font.PLAIN,14));
return button;
}
public JCheckBox getTableCellEditorComponent3(JTable table, Object value, boolean isSelected,int row, int column)
{
JCheckBox cb = (JCheckBox) super.getTableCellEditorComponent(table, value, isSelected, row, column);
cb.setFont(new Font("Arial",Font.PLAIN,14));
return cb;
}
}
Alles anzeigen