Java 中的简单下拉菜单

我正在用Java开发一个非常简单的GUI。

在这个GUI中,我想显示:

  1. 页面顶部带有一些文本的标签
  2. 上述标签下的JComboBox
  3. 上述JComboBox下的JButton

这是我的代码:

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);

    }
}

不幸的是,我得到的结果是

image

正如您在图像中看到的那样,标签,JComboBox和JButton在同一条线上!

相反,我希望它们“堆叠”,如上所述:

杰拉贝尔

JComboBox

JButton

我尝试使用setLocation(int x,int y)方法,但它们总是显示在同一位置。

非常感谢!


答案 1

使用这个将允许您将标签,按钮等放置在您喜欢的位置frame.setLayout(null);


答案 2

如果我理解了你的问题,下面的代码可以在不过度复杂的情况下完成你想要做的事情:

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

    }
}

该方法通常过于复杂,除非您对布局有非常具体的(艺术性?)目标。对于此问题,更简单的解决方案是使用 a 并指定您希望在 y 方向(垂直向下)添加内容。请注意,您必须指定 的尺寸(以及稍后可能要添加的其他一些 GUI 元素),以避免出现巨大的下拉菜单。参见另一个堆栈溢出柱,JComboBox宽度setLocationBoxLayoutJComboBox


推荐