![]() |
| | Themen-Optionen |
| | Nach oben #1 |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.480
|
Hallo, ich würde gerne Folgendes machen. Ich habe eine ComboBox, wähle einen Eintrag aus und klicke auf einen Button "add". Dann soll automatisch der ausgewählte Eintrag in eine Tabelle (JTable) übernommen werden. Da es sich bei den ComboBox-Einträgen um Objekte handelt sollte es doch eigentlich möglich sein, dann auch in der Tabelle Informationen aus den Objekten zusätzlich zum Namen darzustellen, nicht wahr? Gut. *g* Mein Problem liegt jetzt darin, dass ich nicht weiß, wie ich das konstruiere. Mir ist diese Seite und im Speziellen dieser Abschnitt hier bekannt: Aber irgendwie .. finde ich den Ansatz nicht. Also wie ich das mit dem TableModel mache bzw. wie ich damit umgehe, was ich selbst schreiben muss etc. etc. Vielleicht liegt es auch vor mir und ich sehe es nicht. Kann heute durchaus sein Würde mich freuen, wenn mir vielleicht jemand einen Ansatz sagen könnte. Bestenfalls natürlich an einem kleinen Schnipsel oder von mir aus auch an den Sun-Beispielen zu diesem Thema erklärt. Danke im Voraus. Grüße Ben. |
| | |
| | Nach oben #3 |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.480
|
Also in der ComboBox steht bislang nur der Name der Klasse. Schau auch mal hier: Jut. In der Tabelle soll dann eigentlich stehen Code: Name - Info1 - Info2 Ich möchte nämlich gerne in der Tabelle dann z.B. Info1 von einem Standardwert in einen beliebigen Wert ändern. Dazu habe ich mir schon das hier angeschaut: Das wäre passend Jut. Wenn ich die Tabelle dann mit Sachen aus der ComboBox gefüllt habe möchte ich die einzelnen Objekte dann nutzen. Im Endeffekt sind das Hindernisse, die ich dann ins Spielfeld zeichne, allerdings ist das wohl erst mal nicht so wichtig (denke ich mir Ich mache das mit ComboBox und Tabelle, weil es möglich sein soll mehrere Hindernisse gleicher Art in der Tabelle zu verwalten. Dies füge ich dann durch den Button hinzu. Hoffe, dass ich das einigermaßen verständlich rübergebracht habe Grüße Ben. |
| | |
| | Nach oben #5 |
| Projektleiter Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.110
| java Code:
Falls dir das was hilft, weil so richtig hab ich nicht verstanden, wo dein Problem ist... |
| | |
| | Nach oben #6 |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.480
|
Also ich habe nun wirklich lange an dem Kram gesessen aber es hängt noch. Ich muss gestehen, dass ich auch nicht so ganz weiß, was ich noch besser erklären könnte. Es geht darum, dass ich eine ComboBox habe. In dieser stehen derzeit die Einträge "Hindernis1" und "Hindernis2" (mal als Beispiel). Das sind nicht nur Strings, sondern ich fülle die ComboBox so Java Code: Jut. Ich klicke jetzt also auf den Button und dann habe ich erstmal das Problem hier (es geht dort ums Prinzip, bitte nichts in dieses Probleme hineininterpretieren, was ich hier nicht sage!) Ich habe in der API nachgeschaut und einige fire-Methoden gefunden, allerdings weiß ich jetzt als "Noobi" gerade nicht, was ich damit anfangen soll. Liegt allerdings wohl daran, dass ich gerade den Gesamtablauf nicht so ganz verstanden habe .. also wie das mit dem Füllen einer Tabelle eigentlich so geht. Also am Ende möchte ich es eben gerne so haben, dass ich auf den Button klicke und dann Informationen der Klasse, welches in der ComboBox ausgewählt wurde in der Table angezeigt werden. Beispiel: Ich wähle "Hindernis1" in der ComboBox aus und klicke auf "hinzufügen". Nun soll in der Table angezeigt werden .. --> Tabellenkopf(steht immer drin) Name - Info1 - Info2 Und dadrunter: Hindernis1 - rot - 23 "rot" und "23" sind dann Standardwerte, die in der Klasse Hindernis1 hinterlegt sind und die dann ausgelesen werden, damit man sie nachträglich für das Objekt in der Tabelle editieren kann. Ist das besser erklärt? [EDIT] Ich habe vor allem noch ein Problemchen, welches sich gerade so in meine Richtung schiebt Wenn ich das hier schreibe Java Code:
Hmpf. Was machen wir denn nun? [EDIT] Könnte man das eventuell mit der hier angedeuteten HashMap lösen? Ich will ja gar nicht nerven *leibguck*, aber meine Zeit .. sie rennt *gg* Geändert von Ben (06.03.2006 um 09:37 Uhr). |
| | |
| | Nach oben #7 |
| Projektleiter Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.110
|
Ähm... nö. Wenn in dem ComboBoxListModel nur die Class-Objekte von "richtigen" Klassen sind, dann nicht... Dadurch wird die Zeile der Tabelle hinzugefügt (das View, d.h. die JTable, weiß dadurch, dass sich das Model geändert hat). Wenn der Button gedrückt wird, machst du folgendes: Code: tableModel.addClass(((Class)barricadeChooser.getSelectedItem()).newInstance()); Code: public class BarricadeTableModel extends AbstractTableModel {
private List data;
public BarricadeTableModel() {
data = new ArrayList();
}
public String getColumnName(int col) {
switch(col) {
case 0: return "Name";
case 1: return "Farbe";
case 2: return "Größe";
}
}
public int getRowCount() { return data.size(); }
public int getColumnCount() { return 3; }
public Object getValueAt(int row, int col) {
Barricade bar = (Barricade)data.get(row);
switch(col) {
case 0: return bar.getDisplayString();
case 1: return bar.getColor();
case 2: return bar.getSize();
}
return null;
}
public boolean isCellEditable(int row, int col) { return col != 1; /* alle außer der ersten sind editierbar */ }
public void setValueAt(Object value, int row, int col) {
Barricade bar = (Barricade)data.get(row);
if(col == 1) bar.setColor((Color)value);
else if(col == 2) bar.setSize((Integer)value);
}
public void add(Barricade bar) {
data.add(bar);
fireTableRowsInserted(data.size(), data.size());
}
}
|
| | |
| | Nach oben #8 |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.480
|
Jou, dank Dir Ich habe noch gar nicht alle Änderungen durchgeführt, aber Fakt ist, dass er mir diese Zeilen hier nicht durchgehen lässt Java Code:
[code]The method getInstance() is undefined for type Class.[/quote] was ja auch stimmt. Problem ist halt nur .. wie gesagt .. wenn ich da noch ein Barricade reinfriemel erhalte ich die Exception aufgrund des Interfaces Das mit der Tabelle sieht aber logisch aus. Danke natürlich dafür Grüße Ben. |
| | |
| | Nach oben #9 |
| Projektleiter Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.110
|
Nicht "getInstance", sondern "newInstance". In der ComboBox sind doch Class-Objekte vom Typ "BorderBarricade" u.ä., oder? Dann ist das absolut kein Problem. Du darfst nur nicht "Barricade.class" oder ne abstrakte Klasse da reinstecken. |
| | |
| | Nach oben #10 | |||
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.480
| Zitat:
... *Augen reib* *gähn* .. *jammjamm*. Okay.Wenn ich das dann so mache erhalte ich wieder die InstantiationException. Vor der gewissen Zeile habe ich mal ein Code: System.out.println((Class)barricadeChooser.getSelectedItem()); In der Meldung steht noch Code: ... at java.lang.Class.newInstance(Unknown Source) Zitat:
Zitat:
*grübel* | |||
| | |
| | Nach oben #12 |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.480
|
Juppi. Ich geb Dir mal eine Implementierung des Interfaces Barricade. Die Klasse "TriangleBarricade" PHP-Code: PHP-Code: Code: class RectangleBarricade java.lang.InstantiationException: RectangleBarricade at java.lang.Class.newInstance0(Unknown Source) at java.lang.Class.newInstance(Unknown Source) at ConfigurationPanel$1.actionPerformed(ConfigurationPanel.java:94) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source) |
| | |
| | Nach oben #13 |
| Projektleiter Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.110
|
Ne... komm ich nicht klar mit. Macht absolut keinen Sinn... Code: public class DynamicInstantiation {
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
Blubb blubb = Blabb.class.newInstance();
blubb.doSomething();
}
public static interface Blubb {
void doSomething();
}
public static class Blabb implements Blubb {
public void doSomething() {
System.out.println("Printing something!");
}
}
}
|
| | |
| | Nach oben #14 |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.480
|
Wenn ich genau diesen Quelltext abtipper, dann melde mir Eclipse beim Objekt blubb Code: Type mismatch: cannot convert from Object too DemoStart.Blubb Verdammt. Mit NetBeans 4.0 (hab hier lokal an der FH gerade nix Anderes) läuft das. WTF? ![]() |