好的,所以我一直在用Java开发这个彩票程序,而我的代码正处于极端的开始阶段,因此我陷入了这个问题。因此,当我创建2个JLabel并运行该程序时,仅显示一个。我已经尝试寻找答案已有一段时间了,所以我希望有人可以提供帮助。这是我的代码:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Lottery extends JPanel implements ActionListener {

    private static final long serialVersionUID = 5815877011755522230L;
    private JTextField text;
    private JLabel title, subTitle;
    public final String Title = "Lottery";

    public static void main(String[] args) {
        make();

    }

    public Lottery() {

        title = new JLabel(Title, JLabel.CENTER);
        title.setFont(title.getFont().deriveFont(30.0f));
        add(title);


        subTitle = new JLabel("Lottery Numbers");
        subTitle.setHorizontalAlignment(JLabel.HORIZONTAL);
        setLayout(new BorderLayout());
        add(subTitle, BorderLayout.CENTER);

    }

    public static void make(){
        JFrame frame = new JFrame("Lottery");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Lottery hi = new Lottery();
        frame.setContentPane(hi);

        frame.setSize(600, 600);
        frame.setVisible(true);

    }


    public void actionPerformed(ActionEvent e) {

    }
}


因此,如果有人能够帮助我解决这个问题,将不胜感激。

最佳答案

我建议您先看一下A Visual Guide to Layout ManagersHow to Use Borders,然后再看JavaDocs for BorderLayout,这也可能对您解决问题的过程有所启发

您有两个关键问题...


BorderLayout将仅允许在五个可用位置中的任何一个位置管理单个组件,默认位置为CENTER
BorderLayout将忽略设置之前添加的所有组件


因此,如果我们采用您的代码并将其更改为

public Lottery() {
    setLayout(new BorderLayout());

    title = new JLabel(Title, JLabel.CENTER);
    title.setFont(title.getFont().deriveFont(30.0f));
    add(title);


    subTitle = new JLabel("Lottery Numbers");
    subTitle.setHorizontalAlignment(JLabel.HORIZONTAL);
    add(subTitle, BorderLayout.CENTER);
}


如果我们还提供了其他约束,您最终会遇到同样的问题,但是...

public Lottery() {
    setLayout(new BorderLayout());

    title = new JLabel(Title, JLabel.CENTER);
    title.setFont(title.getFont().deriveFont(30.0f));
    add(title, BorderLayout.NORTH);


    subTitle = new JLabel("Lottery Numbers");
    subTitle.setHorizontalAlignment(JLabel.HORIZONTAL);
    add(subTitle, BorderLayout.SOUTH);
}


现在将在北侧放置一个标签,在南侧放置一个标签

关于java - 当有两个JLabel消失时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43035103/

10-10 22:44