一个 JLabel 消失,当有两个

One JLabel disapears, when there are two

好的,所以我在 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) {

    }
}

所以,如果有人能帮我解决这个问题,我将不胜感激。

add(title);
add(subTitle, BorderLayout.CENTER);

看看这段代码,标签。您没有设置标签的位置。所以做与 subtitle 相同的事情。例如

add(title ,BorderLayout.NORTH );

第二个subTitle会覆盖第一个Title,需要在设置Layout后添加。

我建议您先看看 A Visual Guide to Layout Managers and How to Use Borders and having a look at the JavaDocs for BorderLayout 也可能对您的问题过程有所启发

你有两个关键问题...

  1. BorderLayout 将只允许在五个可用位置中的任何一个管理单个组件,默认位置为 CENTER
  2. 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);
}

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