mehrere JComboBoxes

Nali_karamba

Mitglied
Hallo

folgende Ausgangs Situation, ich habe ein Object (im Beispiel heisst es "combos") was ein eigenes Model und eine eigene JComboBox besitzt.

in einem JPanel wird nun eine ArrayList von "combos" objecten angelegt diese bekommen alle das gleiche Model (setzen ihr eigenes Model, aber mit diesem gleich).

in dem JPanel wird zusätzlich gesagt das in jeder JComboBox der ArrayList aus Combos ein anderes Element gesetzt werden soll (per setSelectedElement()).

komischerweise wird aber bei allen das gleiche element gesetzt warum !?

hier mein Beispiel.

Java:
package justforme;

import java.util.ArrayList;
import javax.swing.*;

public class KB extends JFrame {

    public KB(){

        int[]array=new int[5];
        for(int i=0;i<array.length;i++){
            array[i]=i;
        }

        DefaultComboBoxModel test=new DefaultComboBoxModel();
        for(int i=0;i<5;i++){
            test.addElement(i);
        }
        panel panel=new panel(array,test);
        setContentPane(panel);
        pack();
        setVisible(true);



    }

    public class panel extends JPanel{

        public panel(int[]a,DefaultComboBoxModel b){
            ArrayList<Combos> Combos=new ArrayList();
            //erstellen der neuen Combos
            for(int i=0;i<a.length;i++){
                Combos.add(new Combos(a[i],b));
            }
            //hinzufügen der Combos und setzen des selected Elements
            for(int i=0;i<Combos.size();i++){
                this.add(Combos.get(i).Box);
                Combos.get(i).Box.setSelectedIndex(i);
            }
        }
    }

    public class Combos{
        //Jede Combo hat jetzt ihr eigenes Model
        DefaultComboBoxModel InternModel;
        JComboBox Box;
        
        public Combos(int i,DefaultComboBoxModel Model){
            InternModel=Model;
            Box=new JComboBox(InternModel);

        }
    }

    public static  void main (String args[]){
        new KB();
    }
}
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
die Selektion von ComboBoxen wird direkt im ComboBoxModel gespeichert, wenn es nur eins gibt dann auch nur genau ein selektiertes Element für alle Boxen,
wenn du gleiche Daten aber unterschiedliche Selektionen willst, dann musst du komplizierter mit verschiedenen Models arbeiten, die alle auf ein gemeinsames im Hintergrund zugreifen (für die Daten, nicht für die Selektion)

im Gegensatz dazu gibt es bei JList/ JTable von vornherein getrennt SelectionModel
 

Nali_karamba

Mitglied
Mhh ja ich weiss, nur in meinem Fall bietet sich ne ComboBox an bzw. wäre JList oder JTable eher unangebracht.

meine Idee (die auch funktioniert) ist die folgende. Also man übergibt keine DefaultComboBoxModel sondern nen Object[] und erstellt daraus dann jeweils die meine Models.

Geht das irgendwie noch besser !?


Java:
package justforme;

import java.util.ArrayList;
import javax.swing.*;

public class KB extends JFrame {

    public KB(){

        int[]array=new int[5];
        for(int i=0;i<array.length;i++){
            array[i]=i;
        }

        Object[]test =new Object[5];
        for(int i =0;i<test.length;i++){
            test[i]=i;
        }
        panel panel=new panel(array,test);
        setContentPane(panel);
        pack();
        setVisible(true);



    }

    public class panel extends JPanel{

        public panel(int[]a,Object[] b){
            ArrayList<Combos> Combos=new ArrayList();
            //erstellen der neuen Combos
            for(int i=0;i<a.length;i++){
                Combos.add(new Combos(a[i],b));
            }
            //hinzufügen der Combos und setzen des selected Elements
            for(int i=0;i<Combos.size();i++){
                this.add(Combos.get(i).Box);
                Combos.get(i).Box.setSelectedIndex(i);
            }
        }
    }

    public class Combos{
        //Jede Combo hat jetzt ihr eigenes Model
        DefaultComboBoxModel InternModel;
        JComboBox Box;

        public Combos(int i,Object[] Model){
            InternModel=new DefaultComboBoxModel(Model);
            Box=new JComboBox(InternModel);

        }
    }

    public static  void main (String args[]){
        new KB();
    }
}
 
S

SlaterB

Gast
grundsätzlich dringend wie die Feuerwehr zu empfehlen:
- Klassen groß schreiben,
- Variablen klein schreiben
- und ganz ganz ganz doll vermeiden, Variablen genau wie Klassen zu benennen..
(ArrayList<Combos> Combos=new ArrayList(); )

letzteres wird durch die Trennung Klassen groß/ Variablen klein fast schon vermieden,
dennoch auch weiter bedenklich,
>Person person = ..
mag noch gehen, aber
> ArrayList<Person> person = ..
wäre wieder relativ ärgerlich, besser personList nennen oder so

----

ansonsten ist das Object[] ein normaler Weg
 
Zuletzt bearbeitet von einem Moderator:

Nali_karamba

Mitglied
Okay werde ich beherzigen,

noch eine Frage es gibt ja auch die möglichkeit das ganze mit hilfe eines Vectors zumachen (finde ich angenehmer) da sich das Model auch verändern wird.

allerdings wird mir von meinem NetBeans gesagt das die Collection "Vector" veraltet ist,
ist es deswegen ratsam keinen Vector zunehmen !? oder gibt es bereits ersatz dafür !?

bsp. mit Vector (hab die Tipps hier noch nicht berücksichtigt :) )

Java:
package justforme;

import java.util.ArrayList;
import java.util.Vector;
import javax.swing.*;

public class KB extends JFrame {

    public KB(){

        int[]array=new int[5];
        for(int i=0;i<array.length;i++){
            array[i]=i;
        }

        Vector test =new Vector();
        for(int i =0;i<5;i++){
            test.add(i);
        }
        panel panel=new panel(array,test);
        setContentPane(panel);
        pack();
        setVisible(true);



    }

    public class panel extends JPanel{

        public panel(int[]a,Vector b){
            ArrayList<Combos> Combos=new ArrayList();
            //erstellen der neuen Combos
            for(int i=0;i<a.length;i++){
                Combos.add(new Combos(a[i],b));
            }
            System.out.println(b);
            //hinzufügen der Combos und setzen des selected Elements
            for(int i=0;i<Combos.size();i++){
                this.add(Combos.get(i).Box);
                Combos.get(i).Box.setSelectedIndex(i);
            }
        }
    }

    public class Combos{
        //Jede Combo hat jetzt ihr eigenes Model
        DefaultComboBoxModel InternModel;
        JComboBox Box;

        public Combos(int i,Vector Model){
            InternModel=new DefaultComboBoxModel(Model);
            Box=new JComboBox(InternModel);

        }
    }

    public static  void main (String args[]){
        new KB();
    }
}
 
S

SlaterB

Gast
Vector an sich kann moderner durch ArrayList ersetzt werden welche du ja auch schon verwendest,
nur leider wurden DefaultComboBoxModel & Co. nicht auch angepasst, so dass diese ArrayList leider nicht verstehen,

mit der Warnung leben oder sie notfalls unterdrücken/ausschalten,
oder DefaultComboBoxModel kopieren
 

Nali_karamba

Mitglied
das mit dem Kopieren ist genau das was ich will :)

nur habe ich imo das Problem das das mit dem clonen nicht so klappt *hmpf*

schmeisst mir an den Kopf "clone() has protected access in Object"

Java:
package justforme;

import java.util.ArrayList;
import javax.swing.*;

public class KB extends JFrame {

    public KB(){

        int[]array=new int[5];
        for(int i=0;i<array.length;i++){
            array[i]=i;
        }

        DefaultComboBoxModel test=new DefaultComboBoxModel();
        for(int i=0;i<5;i++){
            test.addElement(i);
        }
        panel panel=new panel(array,test);
        setContentPane(panel);
        pack();
        setVisible(true);



    }

    public class panel extends JPanel{

        public panel(int[]a,DefaultComboBoxModel b){
            ArrayList<Combos> Combos=new ArrayList();
            //erstellen der neuen Combos
            for(int i=0;i<a.length;i++){
                Combos.add(new Combos(a[i],b));
            }
            //hinzufügen der Combos und setzen des selected Elements
            for(int i=0;i<Combos.size();i++){
                this.add(Combos.get(i).Box);
                Combos.get(i).Box.setSelectedIndex(i);
            }
        }
    }

    public class Combos implements Cloneable {
        //Jede Combo hat jetzt ihr eigenes Model
        DefaultComboBoxModel InternModel;
        JComboBox Box;

        public Combos(int i,DefaultComboBoxModel Model) throws CloneNotSupportedException{
            
            InternModel=(DefaultComboBoxModel)Model.clone();
            Box=new JComboBox(InternModel);
             

        }
    }

    public static  void main (String args[]){
        new KB();
    }
}


Warum !?
 
S

SlaterB

Gast
clone() funktioniert nicht ohne weiteres, ich glaube das muss jede Klasse erst neu implementieren, dann auch gleich als public überschreiben,
wieso willst du aber das Model clonen()? der Konstruktor mit den Daten geht doch genauso, da wird schon jedesmal das gleiche Model rauskommen,

mit 'DefaultComboBoxModel kopieren' meinte ich, den Quelltext der Klasse in eine eigene Klasse zu schreiben und dort überall Vector gegen ArrayList auszutauschen,
dann könntest du ArrayList statt Vector verwenden ;)
 

Nali_karamba

Mitglied
mhh ich glaube ich verstehe gerade nicht genau wie du es meinst

so geht es ja nicht ....

Java:
package justforme;

import java.util.ArrayList;
import java.util.Vector;
import javax.swing.*;

public class KB extends JFrame {

    public KB(){

        int[]array=new int[5];
        for(int i=0;i<array.length;i++){
            array[i]=i;
        }

        ArrayList test =new ArrayList();
        for(int i =0;i<5;i++){
            test.add(i);
        }
        panel panel=new panel(array,test);
        setContentPane(panel);
        pack();
        setVisible(true);
    }

    public class panel extends JPanel{

        public panel(int[]a,ArrayList b){
            ArrayList<combos> Combos=new ArrayList();
            //erstellen der neuen Combos
            for(int i=0;i<a.length;i++){
                Combos.add(new combos(a[i],b));
            }
            System.out.println(b);
            //hinzufügen der Combos und setzen des selected Elements
            for(int i=0;i<Combos.size();i++){
                this.add(Combos.get(i).Box);
                Combos.get(i).Box.setSelectedIndex(i);
            }
        }
    }



    public static  void main (String args[]){
        new KB();
    }
}


und

Java:
package justforme;

import java.util.ArrayList;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;

public class combos{
        //Jede Combo hat jetzt ihr eigenes Model
        DefaultComboBoxModel InternModel;
        JComboBox Box;

        public combos(int i,ArrayList Model){
            InternModel=new DefaultComboBoxModel(Model);
            Box=new JComboBox(InternModel);

        }
    }
 
S

SlaterB

Gast
und ich verstehe nicht was du an meinen Erklärungen nicht verstehst,
DefaultComboBoxModel kennt nur Vector, nicht ArrayList

also 1) bleibe bei Vector oder Object[], clone() hat damit nix zu tun

oder 2) verwende nicht DefaultComboBoxModel sondern eine andere Klasse die ArrayList akzeptiert
(z.B. Quellcode von DefaultComboBoxModel kopieren, oder ganz selber schreiben)
 

Nali_karamba

Mitglied
Okay jetzt weiss ich was du meinst.
Hab mich trotzdem für was anderes entschieden, ich überliefere einfach immer ne ArrayList und baue erst im Model alles in eine Model um und zwar so--->

Java:
public Combos(int i,ArrayList<String> Model){
            InternModel=new DefaultComboBoxModel();
            for(String s:Model){
                InternModel.addElement(s);
            }
            Box=new JComboBox(InternModel);

        }

hier das ganze DIng --->

Java:
package justforme;

import java.util.ArrayList;
import java.util.Vector;
import javax.swing.*;

public class KB extends JFrame {

    public KB(){

        int[]array=new int[5];
        for(int i=0;i<array.length;i++){
            array[i]=i;
        }

        ArrayList<String> test =new ArrayList();
        for(int i =0;i<5;i++){
            test.add(i+"");
        }
        panel panel=new panel(array,test);
        setContentPane(panel);
        pack();
        setVisible(true);



    }

    public class panel extends JPanel{

        public panel(int[]a,ArrayList b){
            ArrayList<Combos> Combos=new ArrayList();
            //erstellen der neuen Combos
            for(int i=0;i<a.length;i++){
                Combos.add(new Combos(a[i],b));
            }
            System.out.println(b);
            //hinzufügen der Combos und setzen des selected Elements
            for(int i=0;i<Combos.size();i++){
                this.add(Combos.get(i).Box);
                Combos.get(i).Box.setSelectedIndex(i);
            }
        }
    }

    public class Combos{
        //Jede Combo hat jetzt ihr eigenes Model
        DefaultComboBoxModel InternModel;
        JComboBox Box;

        public Combos(int i,ArrayList<String> Model){
            InternModel=new DefaultComboBoxModel();
            for(String s:Model){
                InternModel.addElement(s);
            }
            Box=new JComboBox(InternModel);

        }
    }

    public static  void main (String args[]){
        new KB();
    }
}


Vielen Dank für deine geduldige Hilfe auch wenn ich nicht der einfachste Fragensteller bin.

LG
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Swing Mehrere Ausgaben in JTextArea AWT, Swing, JavaFX & SWT 2
H Mehrere Panels auf JFrame AWT, Swing, JavaFX & SWT 8
S Mehrere Tabellen Zellen gleichzeitig färben AWT, Swing, JavaFX & SWT 5
Apfelbaum2005 Swing JFrame mehrere JPanels mit unterschiedlichen Formen hinzufügen AWT, Swing, JavaFX & SWT 1
K JavaFX unterschiedliche (mehrere Fenster) in seperater Main Methode AWT, Swing, JavaFX & SWT 26
I Scene Builder - mehrere Seiten AWT, Swing, JavaFX & SWT 6
P Swing Mehrere JLabels mit ImageIcon in JPanel lesen AWT, Swing, JavaFX & SWT 1
schoel27 Mehrere JButtons sollen das gleiche Event auslösen AWT, Swing, JavaFX & SWT 2
Z GUI Forms - Mehrere Fenster in einem Projekt AWT, Swing, JavaFX & SWT 18
M mehrere jTextField untereinander AWT, Swing, JavaFX & SWT 1
N Bilder auf Button einfügen und mehrmals ändern (ein Button, mehrere ActionListener) AWT, Swing, JavaFX & SWT 2
B Swing Sudoku: Laden / Speichern von Zahlen aus/in mehrere JTextFields aus/in eine(r) Textdatei AWT, Swing, JavaFX & SWT 9
M JavaFX JavaFX in mehrere Controller AWT, Swing, JavaFX & SWT 21
R mehrere buttons mit forschleife kreieren und individuell bearbeiten AWT, Swing, JavaFX & SWT 1
N JavaFX 1 Listener für mehrere ChoiceBoxen AWT, Swing, JavaFX & SWT 3
N Textdatei GUI, Text in Textarea anzeigen mehrere Zeilen AWT, Swing, JavaFX & SWT 1
temi JavaFX Mehrere Views mit Stage.setScene() oder mit Scene.setRoot()? AWT, Swing, JavaFX & SWT 7
P Swing Mehrere JPanels auf ein JFrame hinzufügen? AWT, Swing, JavaFX & SWT 2
T Swing Tetraeder - mehrere Punkte verbinden? - Ansätze gesucht AWT, Swing, JavaFX & SWT 2
K JavaFX in mehrere Controller aufteilen AWT, Swing, JavaFX & SWT 29
K JavaFX in mehrere Controller aufteilen AWT, Swing, JavaFX & SWT 0
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
K Mehrere Linien zeichnen AWT, Swing, JavaFX & SWT 8
J JavaFX - mehrere Views, Model durchreichen AWT, Swing, JavaFX & SWT 10
it_is_all Swing Mehrere JComboBoxen - wie die versch. Boxen mit ItemStateChange auslesen? AWT, Swing, JavaFX & SWT 3
M Swing Mehrere Textfelder mit ScrollBars - Größe der Felder AWT, Swing, JavaFX & SWT 0
W JavaFX Mehrere Klassen in ein TableView AWT, Swing, JavaFX & SWT 6
F AWT mehrere Panels in einem Frame AWT, Swing, JavaFX & SWT 17
L JavaFX Mehrere JavaFX Szenen mit einem Menü AWT, Swing, JavaFX & SWT 1
D Java FXML mehrere Fenster AWT, Swing, JavaFX & SWT 4
F JavaFX Mehrere Stages "managen" AWT, Swing, JavaFX & SWT 2
r4w Changelistener auf mehrere Textfelder AWT, Swing, JavaFX & SWT 5
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
S Swing Mehrere Modal-Dialoge übereinander AWT, Swing, JavaFX & SWT 5
T 2D-Grafik JFreeChart mehrere Y-Achsen AWT, Swing, JavaFX & SWT 2
C JavaFX mehrere Kreise nach Eingabeprozess ausgeben AWT, Swing, JavaFX & SWT 2
Thallius Swing Mehrere tausend "Panels" erstellen AWT, Swing, JavaFX & SWT 3
C Java FX Warnmeldung: Mehrere Fonts gehören derselben Familie und Stil AWT, Swing, JavaFX & SWT 2
J Mehrere JInternalFrame; GetValues AWT, Swing, JavaFX & SWT 1
JG12111989 mehrere Polyline-Objekte zeichnen AWT, Swing, JavaFX & SWT 3
LexeB4F JTable mehrere Zelle selektieren und inhalte Löschen.. Ideen gesucht AWT, Swing, JavaFX & SWT 1
V Tastatur KeyListener für mehrere Buttons AWT, Swing, JavaFX & SWT 1
K JavaFX Mehrere Cell Editors in einem TreeView Item AWT, Swing, JavaFX & SWT 2
KaffeeFan mehrere JTextField durchlaufen AWT, Swing, JavaFX & SWT 4
J Java -8 Action Listener für mehrere Buttons AWT, Swing, JavaFX & SWT 9
T Dynamisch mehrere Checkboxen anlegen AWT, Swing, JavaFX & SWT 2
G JavaFX Menü und mehrere Scenes AWT, Swing, JavaFX & SWT 16
R Swing Mehrere JTextFields mit einem Document Listener AWT, Swing, JavaFX & SWT 2
D Mehrere RadiButtons auswählar AWT, Swing, JavaFX & SWT 3
P Swing JTable mehrere Zeilen markieren AWT, Swing, JavaFX & SWT 1
M Mehrere Jpanel in einem JScrollPane (Layout) AWT, Swing, JavaFX & SWT 2
T JavaFX FXMLController für mehrere FXML? AWT, Swing, JavaFX & SWT 7
G mehrere Action-Abfolgen erfassen AWT, Swing, JavaFX & SWT 6
elischa JFrame über mehrere JPanel und Listener AWT, Swing, JavaFX & SWT 17
X Swing JPanel mehrere Ebenen zeichnen AWT, Swing, JavaFX & SWT 13
J Mehrere Hyperlinks "stilvoll" darstellen. AWT, Swing, JavaFX & SWT 1
G Mehrere Strings um Kreis zeichnen und positionieren AWT, Swing, JavaFX & SWT 0
S JavaFX Mehrere TreeTableView's synchron scrollen AWT, Swing, JavaFX & SWT 0
U Mehrere Oberflächeninstanzen seperat schließen AWT, Swing, JavaFX & SWT 5
J Rahmen um mehrere GUI Einzelteile AWT, Swing, JavaFX & SWT 2
S Layouts, mehrere Buttons nebeneinander AWT, Swing, JavaFX & SWT 2
M Mehrere Fenster innerhalb einer Application AWT, Swing, JavaFX & SWT 3
T Über mehrere Panel zeichnen AWT, Swing, JavaFX & SWT 2
M ActionListener für mehrere Klassen AWT, Swing, JavaFX & SWT 4
T [LWJGL] mehrere Displays? AWT, Swing, JavaFX & SWT 19
SexyPenny90 Mehrere Fenster AWT, Swing, JavaFX & SWT 2
M Handling 1 Fenster mehrere Panels AWT, Swing, JavaFX & SWT 2
Y Mehrere JSlider verlinken AWT, Swing, JavaFX & SWT 6
Java-Insel LayoutManager Ein GridBagLayout-Objekt für mehrere Panels? AWT, Swing, JavaFX & SWT 2
O Swing JLabel mehrere Zeilen AWT, Swing, JavaFX & SWT 2
P mehrere Rectangles per JButton AWT, Swing, JavaFX & SWT 9
B JToolBar dynamisch auf mehrere Zeilen erweitern AWT, Swing, JavaFX & SWT 2
Jats Zeichen auf mehrere JPanels AWT, Swing, JavaFX & SWT 7
G Mehrere Probleme mit Java's GUI AWT, Swing, JavaFX & SWT 6
G Mehrere Layoutprobleme AWT, Swing, JavaFX & SWT 2
Kenan89 JTable mehrere ListSelections AWT, Swing, JavaFX & SWT 2
M TextArea über mehrere Zeilen - wie Zeileanzahl abfragen? AWT, Swing, JavaFX & SWT 5
J Swing JDialog blokiert mehrere JFrames - soll aber nur den aufrufenden blockieren AWT, Swing, JavaFX & SWT 4
A mehrere Zeilen in GUi ausgeben AWT, Swing, JavaFX & SWT 2
N Mehrere Tasks nacheinander ausführen AWT, Swing, JavaFX & SWT 7
C SWT Mehrere Bilder in GUI laden AWT, Swing, JavaFX & SWT 5
propra Mehrere Objekte gleichzeitig verschieben AWT, Swing, JavaFX & SWT 7
M 2D-Grafik Mehrere Linien (nacheinander) übereinander Zeichnen AWT, Swing, JavaFX & SWT 6
M Mehrere JPanel nacheinander?! AWT, Swing, JavaFX & SWT 11
Furtano AWT mehrere Bilder in einen Frame zeichnen + Layout Manager AWT, Swing, JavaFX & SWT 10
K SWT Mehrere Einträge ins Clipboard legen AWT, Swing, JavaFX & SWT 2
C Swing Ein JFrame mehrere Ansichten AWT, Swing, JavaFX & SWT 8
C Swing Mehrere JSlider sollen aufeinander reagieren AWT, Swing, JavaFX & SWT 4
GUI-Programmer JFilechooser, mehrere Datein selektieren und Reihenfolge (2) AWT, Swing, JavaFX & SWT 8
S Mehrere JLists - Wie kennzeichnen? AWT, Swing, JavaFX & SWT 2
S Swing MVC Ein JFrame, mehrere JPanels AWT, Swing, JavaFX & SWT 6
J Mehrere JRadioButtons, aber nur 1 darf ausgewählt sein AWT, Swing, JavaFX & SWT 4
L Swing Mehrere Button die selbe Größe AWT, Swing, JavaFX & SWT 4
B AWT mehrere Fenster schließen AWT, Swing, JavaFX & SWT 8
I Wie mehrere JComboBoxen in Abhängigkeit einer anderen Box ändern? AWT, Swing, JavaFX & SWT 8
G mehrere JPanel in ein (vertikales) JScrollPane AWT, Swing, JavaFX & SWT 8
F Swing Mehrere Textfelder in Scrollpane einfügen und dann zum Scrollen bringen? AWT, Swing, JavaFX & SWT 4
GianaSisters Swing jTable - Feldtext soll mehrere Zeilen haben AWT, Swing, JavaFX & SWT 3
K JFileChooser mehrere Dateien markieren ohne STRG AWT, Swing, JavaFX & SWT 4
D Mehrere JTabel in einem Frame positionieren AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben