Seite 1 von 2 12 Letzte
  1. #1

    Registriert seit
    19.11.2011
    Beiträge
    2.128
    Thanked 1.936 Times in 1.180 Posts

    Standard JavaEditor - JComboBoxen nebeneinander

    Hallo.

    Ich würde gerne 7 JComboBoxen nebeneinander platzieren.
    Ich arbeite mit Java-Editor.

    Das Ziel ist es , einen Lottotipp erstellen zu können, das
    heißt 6 Zahlen und Zusatzzahl.

    Die Zahlen dürfen nur von 1-49 sein und jede
    ComboBox muss natürlich eine andere Zahl zulassen können,
    was nicht funktioniert, wenn man einem Panel alle ComboBoxen zuordnet.



    Der Codeausschnit sieht derzeit dafür so aus:


    public void createit()
    {
    DefaultComboBoxModel model = new DefaultComboBoxModel("1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49".split(","));
    JComboBox box1 = new JComboBox(model);
    JComboBox box2 = new JComboBox(model);
    JComboBox box3 = new JComboBox(model);
    JComboBox box4 = new JComboBox(model);
    JComboBox box5 = new JComboBox(model);
    JComboBox box6 = new JComboBox(model);
    JComboBox boxsz = new JComboBox(model);

    int w = 40;
    int h = 20;

    box1.setBounds(1 , 1 , w , h);
    box2.setBounds(81 , 1 , w, h);
    box3.setBounds(122, 1 , w, h);
    box4.setBounds(163 , 1 , w , h);
    box5.setBounds(204, 1 , w, h);
    box6.setBounds(245, 1 , w, h);
    boxsz.setBounds(286 , 1 , w , h);



    box1.setPrototypeDisplayValue("49");
    box2.setPrototypeDisplayValue("49");
    box3.setPrototypeDisplayValue("49");
    box4.setPrototypeDisplayValue("49");
    box5.setPrototypeDisplayValue("49");
    box6.setPrototypeDisplayValue("49");
    boxsz.setPrototypeDisplayValue("49");



    JPanel BoxP1 = new JPanel();
    BoxP1.setLayout(new GridLayout(0, 1, 0, 0));
    BoxP1.add(box1);

    JPanel BoxP2 = new JPanel();
    BoxP2.setLayout(new GridLayout(0, 1, 0, 0));
    BoxP2.add(box1);

    JPanel BoxP3 = new JPanel();
    BoxP3.setLayout(new GridLayout(0, 1, 0, 0));
    BoxP3.add(box1);

    JPanel BoxP4 = new JPanel();
    BoxP4.setLayout(new GridLayout(0, 1, 0, 0));
    BoxP4.add(box1);

    JPanel BoxP5 = new JPanel();
    BoxP5.setLayout(new GridLayout(0, 1, 0, 0));
    BoxP5.add(box1);

    JPanel BoxP6 = new JPanel();
    BoxP6.setLayout(new GridLayout(0, 1, 0, 0));
    BoxP6.add(box1);

    JPanel BoxPsz = new JPanel();
    BoxPsz.setLayout(new GridLayout(0, 1, 0, 0));
    BoxPsz.add(box1);




    JFrame frame = new JFrame();
    frame.setResizable(false);
    frame.setLayout(new GridLayout(1, 7, 10, 10));
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.add(BoxP1);
    frame.add(BoxP2);
    frame.add(BoxP3);
    frame.add(BoxP4);
    frame.add(BoxP5);
    frame.add(BoxP6);
    frame.add(BoxPsz);
    frame.pack();
    frame.setLocation(300, 300);
    frame.setVisible(true);

    }


    Derzeit sieht es leider nur so aus : Name:  Unbenannt.PNG
Hits: 456
Größe:  1,4 KB
    Wie bekomme ich es hin, dass die nebeneinander kommen?
    Geändert von !lkay (16.03.2014 um 14:51 Uhr)

  2. #2

    Registriert seit
    19.11.2011
    Beiträge
    117
    Thanked 37 Times in 34 Posts

    Standard AW: JavaEditor - JComboBoxen nebeneinander

    Da du keinem deiner Comboboxen eine Location zuweist, ist eigentlich klar, dass alle übereinander liegen.
    Versuch es mal mit setBounds(Länge, Breite, x-Location, y-Location), damit sollte dann genau festgelegt werden können, wo sich die jeweilige Combobox befindet.
    Hab selbst schon 'ne ganze Weile nicht mehr mit Java gearbeitet, bin mir also nicht ganz sicher, sollte aber eigentlich funktionieren.

  3. #3

    Registriert seit
    19.11.2011
    Beiträge
    2.128
    Thanked 1.936 Times in 1.180 Posts

    Standard AW: JavaEditor - JComboBoxen nebeneinander

    Hat nicht funktioniert.. code habe ich im Eingangspost geändert.

  4. #4

    Registriert seit
    19.11.2011
    Beiträge
    117
    Thanked 37 Times in 34 Posts

    Standard AW: JavaEditor - JComboBoxen nebeneinander

    Du hast die beiden x,y vertauscht, die ersten geben nur die Größe der Combobox an, die letzten beiden geben die Location an, also müsstest du die ersten beiden Parameter mit den letzten beiden tauschen.

  5. #5

    Registriert seit
    19.11.2011
    Beiträge
    2.128
    Thanked 1.936 Times in 1.180 Posts

    Standard AW: JavaEditor - JComboBoxen nebeneinander

    Nein, die ersten beiden geben die Koordinaten an, das ist eigentlich immer so.

    Component: setBounds(int x,int y,int width,int height)

    Habe probiert bei den Panel .setBounds zu machen aber habe es auch bei den ComboBoxen probiert - beides erfolgslos.
    Geändert von !lkay (16.03.2014 um 15:01 Uhr)

  6. #6
    Avatar von Nuebel
    Registriert seit
    23.11.2013
    Beiträge
    446
    Thanked 361 Times in 236 Posts

    Standard AW: JavaEditor - JComboBoxen nebeneinander

    Die Methode setBounds(int, int, int, int) benötigst du in der Regel nur im Zusammenhang mit dem Null-Layout.
    Ein JFrame hat standardmäßig das BorderLayout, d.h. es gibt die Ausrichtungen NORTH, SOUTH, WEST, EAST und CENTER. Du fügst dem Fenster einen Haufen von Panels hinzu, ohne die nötige Information mitzugeben, wie das BorderLayout diese Panels ausrichten soll.

    Du brauchst nicht für jede JComboBox ein eigenes Panel, wobei die Wahl des GridLayouts eine gute Entscheidung war. Instanziiere genau ein Panel, dessen Layout du auf ein GridLayout setzt mit 0 rows (1. Parameter) und 7 cols (zweiter Parameter). Mit dem dritten und vierten Parameter kannst du die horizontalen/vertikalen Abstände einstellen. Sämtliche JComboBox-Instanzen fügst du anschließend diesem Panel hinzu.
    Durch die Parameterwerte des GridLayouts werden immer 7 JComboBoxen nebeneinander dargestellt (falls genug Platz vorhanden ist), fügst du eine 8. oder 9. hinzu, kommen sie in eine neue Zeile. Du kannst dir das wie bei eine Tabellenkalkulation (z.B. Excel) vorstellen mit Zeilen und Spalten, nur dass es nicht möglich ist, Zellen zu verbinden. Dafür gibt es das GridBagLayout.

    Letztlich musst du dem Frame das Panel hinzufügen, z.B. im CENTER: frame.add(panel, BorderLayout.CENTER);.
    Geändert von Nuebel (16.03.2014 um 15:47 Uhr)

  7. #7

    Registriert seit
    19.11.2011
    Beiträge
    2.128
    Thanked 1.936 Times in 1.180 Posts

    Standard AW: JavaEditor - JComboBoxen nebeneinander

    Da ist jetzt das Problem, dass die Combobox Werte
    synchron verändert werden,
    das heißt: ich ändere bei irgendeiner ComboBox auf dem Panel
    den Wert und alle anderen Comboboxen bekommen automatisch
    auch diesen Wert..



    Auf dem neu erstellten Frame ist das Layout zwar soweit perfekt, es ist jedoch so,
    dass ich es eigentlich etwas größer haben möchte,
    da ich noch weitere Controls hinzufügen möchte.

    Z.B möchte ich Labels machen und einen Button etc.


    Wie geht das? Muss ich die jetzt dem Panel hinzufügen,
    also müssen die auch in dieses Raster?
    Geändert von !lkay (16.03.2014 um 16:13 Uhr)

  8. #8
    Avatar von Nuebel
    Registriert seit
    23.11.2013
    Beiträge
    446
    Thanked 361 Times in 236 Posts

    Standard AW: JavaEditor - JComboBoxen nebeneinander

    @NightMareG

    Das liegt höchstwahrscheinlich daran, dass du jeder JComboBox dasselbe Model zuweist.
    Versuch das Folgende mal:
    Code:
    int[] options = new int[49];
    
    for (int i = 0; i < options.length; ++i) {
        options[i] = i + 1;
    }
    
    [...]
    
    JComboBox<Integer> box1 = new JComboBox<Integer>((int[]) options.clone());
    JComboBox<Integer> box2 = new JComboBox<Integer>((int[]) options.clone());
    ...
    BTW, vielleicht wäre es auch ratsam, die ComboBoxen ebenfalls in einem Array oder einer Liste zu verwalten. Wenn du ein klassiches Lottospiel programmieren willst mit 12 Spielen, wird das ziemlich mühsam.

    Am besten fertigst du mir eine Skizze in Paint an, wie dein GUI am Ende aussehen sollte. Unter deiner Beschreibung kann ich mir gerade nicht sehr viel vorstellen.


    EDIT:

    Du kannst dein Vorhaben auch ohne ComboBoxen realisieren. Habe da mal schnell etwas gebastelt, wo du die Tipps mit einem Mausklick gibst:

    Code:
    class LottoPanel extends JPanel {
    	private List<LottoOption> options;
    	private int selected;
    
    	public LottoPanel() {
    		super();
    
    		options = new ArrayList<LottoOption>();
    		initOptions();
    		
    
    		addMouseListener(new MouseAdapter() {
    			@Override
    			public void mouseClicked(MouseEvent me) {
    				int mx = me.getX();
    				int my = me.getY();
    
    				for (LottoOption lo : options) {
    					if (lo.rect.contains(mx, my) && selected < 6) {
    						lo.selected = true;
    						System.out.println("Ausgewaehlt: " + lo.getNumber());
    						++selected;
    					}
    				}
    
    				repaint();
    			}
    		});
    	}
    
    	private void initOptions() {
    		int x    =  10, y    =  10;
    		int w    = 15, h    = 15;
    		int hgap =  5, vgap =  5;
    
    		for (int i = 0; i < 49; ++i) {
    			LottoOption lo = new LottoOption(i+1);
    			if (i > 0 && i % 7 == 0) {
    				x = 10;
    				y += h + vgap;
    			}
    
    			lo.rect = new Rectangle(x, y, w, h);
    
    			x += w + hgap;
    
    			options.add(lo);
    		}
    	}
    
    	@Override
    	protected void paintComponent(Graphics g) {
    		super.paintComponent(g);
    		for (LottoOption lo : options) {
    			int x = lo.rect.x, y = lo.rect.y;
    			int w = lo.rect.width, h = lo.rect.height;
    
    			g.drawRect(x, y, w, h);
    			g.drawString(String.valueOf(lo.getNumber()), x + 2, y + h - 2);
    
    			if (lo.selected) {
    				g.setColor(Color.RED);
    				g.drawLine(x, y, x + w, y + h);
    				g.drawLine(x, y + h, x + w, y);
    				g.setColor(Color.BLACK);
    			}
    		}
    	}
    }
    
    class LottoOption {
    	private final int number;
    
    	// public ist böse
    	public Rectangle rect;
    	public boolean selected;
    
    	public LottoOption(int number) {
    		this.number = number;
    	}
    
    	public int getNumber() {
    		return number;
    	}
    }
    Achtung: Quick & Dirty mit verpöntem Design.
    Geändert von Nuebel (16.03.2014 um 17:27 Uhr)

  9. The Following User Says Thank You to Nuebel For This Useful Post:

    Jokuu (16.03.2014)

  10. #9

    Registriert seit
    19.11.2011
    Beiträge
    2.128
    Thanked 1.936 Times in 1.180 Posts

    Standard AW: JavaEditor - JComboBoxen nebeneinander

    Hey.

    Derzeit sieht es so aus:

    Name:  Unbenannt.PNG
Hits: 435
Größe:  4,5 KB

    Was mich stört/ungelöst ist:

    -Die ComboBoxen & auch anderen Controls sollen eigentlich ihre Größe behalten.
    Bei den ComboBoxen habe ich angegeben, dass die Zahl 49 sichtbar sein soll(also zwei Ziffern) - irgendwie
    passt sich die größe jetzt dem größten Control an ,so wie es scheint.
    Geändert von !lkay (16.03.2014 um 18:32 Uhr)

  11. #10
    Avatar von Nuebel
    Registriert seit
    23.11.2013
    Beiträge
    446
    Thanked 361 Times in 236 Posts

    Standard AW: JavaEditor - JComboBoxen nebeneinander

    Das liegt am GridLayout. Da bekommt jede Komponenten genau gleich viel Platz wie alle anderen auch. Wenn jetzt eine Komponente aufgrund ihres anzuzeigenden Inhalts mehr Platz benötigt, werden alle anderen Komponenten ebenfalls vergrößert. Dies lässt sich zwar eingrenzen, im den du dem Panel mit setMinimum, -Preferred, und -MaximumSize(Dimension) seine minimale, bevorzugte und maximale Größe zuweist, aber die beste Lösung ist das nicht.

    Ändern ließe sich das außerdem dadurch, dass mehrere Panels nimmst mit unterschiedlichen Layout-Mangern und diese verschachtelst. Diese Lösung ist etwas langatmig, aber ok.
    Ansonsten kannst du Gebrauch vom GridBagLayout machen, dem kompliziertesten Layout-Manager. Aber beherrschst du ihn erst einmal, lässt sich jedes erdenkliche Layout mit ihm realisieren, ohne Verschachtelungen.

  12. The Following 2 Users Say Thank You to Nuebel For This Useful Post:

    Jokuu (16.03.2014)

Seite 1 von 2 12 Letzte

Ähnliche Themen

  1. 3 Bilder nebeneinander
    Von x BoooM x im Forum HTML
    Antworten: 2
    Letzter Beitrag: 04.04.2012, 12:10
  2. 3 Bilder nebeneinander
    Von x BoooM x im Forum Webentwicklung
    Antworten: 1
    Letzter Beitrag: 29.01.2012, 00:42
  3. Bild 3x nebeneinander
    Von x BoooM x im Forum Angebot & Nachfrage
    Antworten: 2
    Letzter Beitrag: 17.12.2011, 21:13
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.