Eenvoudig vervolgkeuzemenu in Java

Ik werk aan een zeer eenvoudige GUI in Java.

In deze GUI wil ik weergeven:

  1. Een label met wat tekst bovenaan de pagina
  2. Een JComboBox onder het genoemde label
  3. Een JButton onder de genoemde JComboBox

Hier is mijn code:

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Prova {
public static void main(String[] args) {
    JFrame frame = new JFrame("A Simple GUI");
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(500, 500);
    frame.setLocation(430, 100);
    JPanel panel = new JPanel();
    frame.add(panel);
    JLabel lbl = new JLabel("Select one of the possible choices and click OK");
    lbl.setVisible(true);
    panel.add(lbl);
    String[] choices = { "CHOICE 1","CHOICE 2", "CHOICE 3","CHOICE 4","CHOICE 5","CHOICE 6"};
    final JComboBox<String> cb = new JComboBox<String>(choices);
    cb.setVisible(true);
    panel.add(cb);
    JButton btn = new JButton("OK");
    panel.add(btn);
    }
}

Helaas is het resultaat dat ik krijg

Zoals je kunt zien in de afbeelding, staan het label, de JComboBox en de JButton op dezelfde lijn!

In plaats daarvan wil ik ze “gestapeld” zoals hierboven beschreven:

JLabel

JComboBox

JKnop

Ik heb geprobeerd de methode setLocation(int x, int y) te gebruiken, maar ze worden altijd op dezelfde positie weergegeven.

Hartelijk dank!


Antwoord 1, autoriteit 100%

gebruik frame.setLayout(null);hiermee kunt u het label, de knop enz. plaatsen waar u maar wilt


Antwoord 2, autoriteit 67%

U moet een Java-standaardlay-out gebruiken (GridLayout, LinearLayout, BoxLayout)

Ik raad aan om een rasterlay-out te gebruiken met 1 kolom en 3 rijen

zoals hieronder

 setLayout(new GridLayout(1,3));
         add(new Button("1"));
         add(new Button("2"));
         add(new Button("3"));

Antwoord 3, autoriteit 67%

Als ik je vraag heb begrepen, volbrengt de volgende code wat je probeert te doen zonder al te ingewikkeld te zijn:

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.BoxLayout; // added code
import java.awt.Component; // added code
public class Prova {
public static void main(String[] args) {
    JFrame frame = new JFrame("A Simple GUI");
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(500, 500);
    frame.setLocation(430, 100);
    JPanel panel = new JPanel();
    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); // added code
    frame.add(panel);
    JLabel lbl = new JLabel("Select one of the possible choices and click OK");
    lbl.setAlignmentX(Component.CENTER_ALIGNMENT);
    //lbl.setVisible(true); // Not needed
    panel.add(lbl);
    String[] choices = { "CHOICE 1", "CHOICE 2", "CHOICE 3", "CHOICE 4",
                         "CHOICE 5", "CHOICE 6" };
    final JComboBox<String> cb = new JComboBox<String>(choices);
    cb.setMaximumSize(cb.getPreferredSize()); // added code
    cb.setAlignmentX(Component.CENTER_ALIGNMENT);// added code
    //cb.setVisible(true); // Not needed
    panel.add(cb);
    JButton btn = new JButton("OK");
    btn.setAlignmentX(Component.CENTER_ALIGNMENT); // added code
    panel.add(btn);
    frame.setVisible(true); // added code
    }
}

De setLocationmethode is vaak te ingewikkeld, tenzij je heel specifieke (artistieke?) doelen voor de lay-out hebt. Voor dit probleem is een eenvoudigere oplossing om een BoxLayoutte gebruiken en aan te geven dat je dingen wilt toevoegen in de y-richting (verticaal naar beneden). Merk op dat je de afmetingen van de JComboBox(en enkele andere GUI-elementen die u later misschien wilt toevoegen) om een gigantisch vervolgkeuzemenu te vermijden. vgl. nog een stackoverflow-bericht, JComboBox-breedte


Antwoord 4, autoriteit 50%

Het komt door de lay-out die wordt gebruikt om de kinderen uit te lijnen. Standaard is het de FlowLayout die alle onderliggende componenten in een stroom plaatst, beginnend van links naar rechts en vandaar dat je de bovenstaande weergave krijgt.

U kunt een GridLayout gebruiken met 3 rijen en 1 kolom volgens uw vereisten.

GridLayout

Alle lay-outs


Antwoord 5, autoriteit 17%

Bestudeer enkele tutorials over het gebruik van lay-outmanagers, daar vindt u de oplossing. Ze zijn echter behoorlijk taai.


Antwoord 6

gebruik Panel.setLayout(null);
en gebruik setBounds voor elk onderdeel om ze naar keuze te plaatsen
bv:

JButton btn=new JButton("Press"); 
btn.setBounds(10, 10, 100, 20);//where(x, y, length, height)
JPanel.add(btn);//this is just a snippet, you will have to declare an object
//for the JPanel:)

Other episodes