JPanel panel = new JPanel(new BorderLayout());
JLabel einlabel = new JLabel("Hello World");
panel.add(einlabel,BorderLayout.NORTH);
panel.add(einlabel,BorderLayout.SOUTH);
Wildcard hat gesagt.:Components existieren nur einmal und können nur einen Parent haben.
Mach eine neue Instanz
Neudeutsch: Häh?pc-world hat gesagt.:Würde es gehen, wenn ich eine Methode mache, die eine JComboBox zurückliefert, und dann halt zweimal einer JComboBox zuweise?
class Foo extends JPanel
{
void addAll()
{
// Füge 10 Components hinzu...
...
//-------- Diese ComboBox soll in Zukunft zwei mal auftauchen!
JComboBox box1 = new JComboBox();
box1.foo()...
...
20 Zeilen, um die ComboBox zu erstellen und zu füllen
...
box1.bar()...
add(box1);
//-------- Diese ComboBox soll in Zukunft zwei mal auftauchen!
// Füge 10 weitere Components hinzu...
...
}
}
class Foo extends JPanel
{
void addAll()
{
// Füge 10 Components hinzu...
...
//-------- Diese ComboBox soll in Zukunft zwei mal auftauchen!
add(createTheCombo());
add(createTheCombo());
//-------- Oder 5 mal....
add(createTheCombo());
add(createTheCombo());
add(createTheCombo());
// Füge 10 weitere Components hinzu...
...
}
private JComboBox createTheCombo()
{
JComboBox box1 = new JComboBox();
box1.foo()...
...
20 Zeilen, um die ComboBox zu erstellen und zu füllen
...
box1.bar()...
return box1;
}
}
Wildcard hat gesagt.:Das kann weitreichende Komplikationen mit sich bringen. Du solltest das nicht tun.
import java.io.*;
public class SonstigeMethoden {
public static Object objektKopieren(Object obj) {
Object kopie = new Object();
try {
// ObjectOutputStream erzeugen
java.io.ByteArrayOutputStream bufOutStream = new ByteArrayOutputStream();
ObjectOutputStream outStream = new ObjectOutputStream(bufOutStream);
// Objekt im byte-Array speichern
outStream.writeObject(obj);
outStream.close();
// Pufferinhalt abrufen
byte[] buffer = bufOutStream.toByteArray();
// ObjectInputStream erzeugen
ByteArrayInputStream bufInStream = new ByteArrayInputStream(buffer);
ObjectInputStream inStream = new ObjectInputStream(bufInStream);
// Objekt wieder auslesen
kopie = inStream.readObject();
} catch (Exception ex) {
System.out.println("Fehler beim Objekt kopieren.");
ex.printStackTrace();
}
return kopie;
}
}
package testPackage2;
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;
public class DoppeltAddProblem {
JComboBox liste1 = new JComboBox();
JComboBox liste2 = new JComboBox();
JFrame fenster = new JFrame("Test");
JPanel panel = new JPanel();
public JComboBox getErsteListe(int nr) {
for (ActionListener listener : liste1.getActionListeners()) {
// Löscht alle bestehende Listeners, um Doppelt-Evente zu vermeiden
liste1.removeActionListener(listener);
}
JComboBoxWerte[] objektArray = getDB(nr); // Holt sich Objekte aus einer
// Datenbank
DefaultComboBoxModel model = new DefaultComboBoxModel(objektArray);
liste1.setModel(model);
liste1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int wert = ((JComboBoxWerte) liste1.getModel()
.getSelectedItem()).wert; // wert ist eine
// Instanzvariable von
// JComboBoxWerte
System.out.println("Listener: " + wert);
}
}); // Ende ActionListener
return liste1;
}
public JComboBox getZweiteListe() {
JComboBoxWerte[] objektArray = new JComboBoxWerte[10];
for (int i = 0; i < 10; i++) {
objektArray[i] = new JComboBoxWerte((i + 1), (i + 1));
}
DefaultComboBoxModel model = new DefaultComboBoxModel(objektArray);
liste2.setModel(model);
liste2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int wert = ((JComboBoxWerte) liste2.getModel()
.getSelectedItem()).wert;
System.out.println("Listener: " + wert);
getErsteListe(wert);
}
}); // Ende ActionListener
return liste2;
}
public void guiEinrichten() {
fenster.setSize(400, 400);
fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fenster.add(panel);
panel.add(getZweiteListe());
panel.add(getErsteListe(1));
panel.add(getErsteListe(1));
fenster.validate();
fenster.setVisible(true);
}
public static void main(String[] args) {
new DoppeltAddProblem().guiEinrichten();
}
}
panel.add(getZweiteListe());
panel.add(getErsteListe(1));
panel.add(getErsteListe(1));
Zumindest der zweiten Hälfte würde ich jetzt mal widersprechen.... :wink:Wildcard hat gesagt.:Dein Code ist so katastrophal schlecht, das sieht man wirklich nicht alle Tage.
// [url]http://www.java-forum.org/de/viewtopic.php?t=70964&postdays=0&postorder=asc&start=15[/url]
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;
public class DoppeltAddProblem {
JFrame fenster = new JFrame("Test");
JPanel panel = new JPanel();
public JComboBox createListe(final int nr)
{
final JComboBox liste1 = new JComboBox();
DefaultComboBoxModel model = new DefaultComboBoxModel(new String[]{ "Laa", "Lii", "Luu" });
liste1.setModel(model);
liste1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Selected: " + liste1.getModel().getSelectedItem()+" in liste "+nr);
}
});
return liste1;
}
public void guiEinrichten() {
fenster.setSize(400, 400);
fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fenster.add(panel);
for (int i=0; i<10; i++)
{
panel.add(createListe(i));
}
fenster.validate();
fenster.setVisible(true);
}
public static void main(String[] args) {
new DoppeltAddProblem().guiEinrichten();
}
}