Jokuu (16.03.2014)
-
16.03.2014, 13:46 #1
- Registriert seit
- 19.11.2011
- Beiträge
- 2.128
Thanked 1.936 Times in 1.180 PostsJavaEditor - 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 :
Wie bekomme ich es hin, dass die nebeneinander kommen?Geändert von !lkay (16.03.2014 um 14:51 Uhr)
-
16.03.2014, 14:07 #2
- Registriert seit
- 19.11.2011
- Beiträge
- 117
Thanked 37 Times in 34 PostsAW: 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.
-
16.03.2014, 14:51 #3
- Registriert seit
- 19.11.2011
- Beiträge
- 2.128
Thanked 1.936 Times in 1.180 PostsAW: JavaEditor - JComboBoxen nebeneinander
Hat nicht funktioniert.. code habe ich im Eingangspost geändert.
-
16.03.2014, 14:53 #4
- Registriert seit
- 19.11.2011
- Beiträge
- 117
Thanked 37 Times in 34 PostsAW: 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.
-
16.03.2014, 15:00 #5
- Registriert seit
- 19.11.2011
- Beiträge
- 2.128
Thanked 1.936 Times in 1.180 PostsAW: 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)
-
16.03.2014, 15:37 #6
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)
-
16.03.2014, 16:08 #7
- Registriert seit
- 19.11.2011
- Beiträge
- 2.128
Thanked 1.936 Times in 1.180 PostsAW: 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)
-
16.03.2014, 16:23 #8
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()); ...
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; } }
Geändert von Nuebel (16.03.2014 um 17:27 Uhr)
-
The Following User Says Thank You to Nuebel For This Useful Post:
-
16.03.2014, 18:08 #9
- Registriert seit
- 19.11.2011
- Beiträge
- 2.128
Thanked 1.936 Times in 1.180 PostsAW: JavaEditor - JComboBoxen nebeneinander
Hey.
Derzeit sieht es so aus:
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)
-
16.03.2014, 18:53 #10
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.
-
The Following 2 Users Say Thank You to Nuebel For This Useful Post:
Jokuu (16.03.2014)
Ähnliche Themen
-
3 Bilder nebeneinander
Von x BoooM x im Forum HTMLAntworten: 2Letzter Beitrag: 04.04.2012, 12:10 -
3 Bilder nebeneinander
Von x BoooM x im Forum WebentwicklungAntworten: 1Letzter Beitrag: 29.01.2012, 00:42 -
Bild 3x nebeneinander
Von x BoooM x im Forum Angebot & NachfrageAntworten: 2Letzter Beitrag: 17.12.2011, 21:13
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.