Hi,
ich habe ein paar Fragen bzgl. einer JTable in die ich Objekte reinpacken und auch wieder rausziehen kann.
Ich habe mir in den FAQs mal die Darstellung der Daten in einer JTable durchgelesen aber habe Probleme mit den Objekten die ich dort reinpacken möchte.
Ich habe z.B. ein Customer Objekt mit Vorname, Nachname, Firma etc. die ich aus einer MySQL Datenbank lade (via Hibernate). Diese ganzen Customer Objekte liegen in einer ArrayList.
Momentan habe ich eine Methode die diese Daten in ein Vector packt und dann in ein DefaultTableModel lädt, da ich nicht alle Eigenschaften dieses Customer Objekts haben möchte sondern nur bestimmte.
Jetzt würde ich gerne in diese JTable richtige Objekte packen (aber nur bestimmte Eigenschaften in der JTable anzeigen) und anschließend das Objekt aus einer selektierten Zeile zu bekommen. Nur habe ich nicht nur Customer sondern viele andere Objekte die in andere JTables geladen werden sollen, natürlich mit unterschiedlichen Spaltennamen (in der Customer JTable werden natürlich auch nur Customer angezeigt und keine ContactPerson). Dafür möchte ich gerne nur eine TableCellRenderer Klasse benutzen (wenn das nicht funktionieren sollte ist das nicht weiter schlimm). Ich habe das ganze mal mit JComboBoxen gemacht und mit instanceof zwischen den unterschiedlichen Objekten unterscheiden zu können.
Hier erstmal meine Klassen:
Meine TestKlasse:
Probleme habe ich mit folgenden Punkten:
1. Wie bzw. wo sollte oder kann ich die Namen der Spalten für die Customer oder die ContactPerson Tabelle vergeben. Ich nehme mal an in der Renderer Klasse?
2. Wie kann ich der JTable meine Daten übergeben. Mit dem DefaultTableModel klappt das glaube ich nicht mehr...
3. Und wie kann ich dann auf das Objekt zugreifen ... getSelectedRow der JTable gibt mit nur ein int zurück.
Stehe grad ziemlich auf dem Schlauch die Daten in ein Model zu packen und korrekt anzeigen zu lassen.
Vielen Dank,
goodcat
ich habe ein paar Fragen bzgl. einer JTable in die ich Objekte reinpacken und auch wieder rausziehen kann.
Ich habe mir in den FAQs mal die Darstellung der Daten in einer JTable durchgelesen aber habe Probleme mit den Objekten die ich dort reinpacken möchte.
Ich habe z.B. ein Customer Objekt mit Vorname, Nachname, Firma etc. die ich aus einer MySQL Datenbank lade (via Hibernate). Diese ganzen Customer Objekte liegen in einer ArrayList.
Momentan habe ich eine Methode die diese Daten in ein Vector packt und dann in ein DefaultTableModel lädt, da ich nicht alle Eigenschaften dieses Customer Objekts haben möchte sondern nur bestimmte.
Jetzt würde ich gerne in diese JTable richtige Objekte packen (aber nur bestimmte Eigenschaften in der JTable anzeigen) und anschließend das Objekt aus einer selektierten Zeile zu bekommen. Nur habe ich nicht nur Customer sondern viele andere Objekte die in andere JTables geladen werden sollen, natürlich mit unterschiedlichen Spaltennamen (in der Customer JTable werden natürlich auch nur Customer angezeigt und keine ContactPerson). Dafür möchte ich gerne nur eine TableCellRenderer Klasse benutzen (wenn das nicht funktionieren sollte ist das nicht weiter schlimm). Ich habe das ganze mal mit JComboBoxen gemacht und mit instanceof zwischen den unterschiedlichen Objekten unterscheiden zu können.
Hier erstmal meine Klassen:
Java:
public class JTableCellRenderer extends JLabel implements TableCellRenderer{
private static final long serialVersionUID = -5317742370341211975L;
public JTableCellRenderer() {
setOpaque( true );
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if( value instanceof Customer ) {
Customer customer = (Customer) value;
setText( customer.getCompany() );
setText( customer.getLastName() );
...
}
if( value instanceof ContactPerson ) {
ContactPerson contactPerson = (ContactPerson) value;
setText( contactPerson.getFirstName() );
setText( contactPerson.getLastName() );
...
}
return this;
}
}
Meine TestKlasse:
Java:
public class TestCustomerList {
private JTableCellRenderer cRenderer = new JTableCellRenderer();
private JFrame frame;
private JTable table;
private JPanel panel;
private JButton btnGetselectedrow;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TestCustomerList window = new TestCustomerList();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public TestCustomerList() {
initialize();
CustomerList customerList = new CustomerList();
table.setModel( customerList.getCustomerTableModel() ); // <- Hier wird momentan noch ein DefaultTableModel in die JTable geladen.
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 808, 676);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JScrollPane scrollPane = new JScrollPane();
frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
table = new JTable();
table.setDefaultRenderer(Object.class, cRenderer); // ??
table.setFillsViewportHeight(true);
scrollPane.setViewportView(table);
panel = new JPanel();
scrollPane.setRowHeaderView(panel);
btnGetselectedrow = new JButton("getSelectedRow");
btnGetselectedrow.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
}
});
panel.add(btnGetselectedrow);
}
}
Probleme habe ich mit folgenden Punkten:
1. Wie bzw. wo sollte oder kann ich die Namen der Spalten für die Customer oder die ContactPerson Tabelle vergeben. Ich nehme mal an in der Renderer Klasse?
2. Wie kann ich der JTable meine Daten übergeben. Mit dem DefaultTableModel klappt das glaube ich nicht mehr...
3. Und wie kann ich dann auf das Objekt zugreifen ... getSelectedRow der JTable gibt mit nur ein int zurück.
Stehe grad ziemlich auf dem Schlauch die Daten in ein Model zu packen und korrekt anzeigen zu lassen.
Vielen Dank,
goodcat
Zuletzt bearbeitet: