Java GUI不会显示JLabel

时间:2012-11-22 21:18:40

标签: java swing user-interface jpanel frame

我想用Java创建一个简单的GUI。我知道创建JLabel等的基础知识。但是,我找不到为什么我的JLabel没有显示在屏幕上。这是我的代码:

package test;

import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.*;
import javax.swing.*;

public class A1Panel extends JPanel implements ActionListener { 
    JLabel firstInt;

    public void init() {
        makeComponents();
        makeLayout();
    }

    private void makeComponents() {
        firstInt = new JLabel("First argument");
        firstInt.setFont(new Font("Helvetica", Font.BOLD, 16));
        firstInt.setBackground(Color.lightGray);
        firstInt.setVisible(true);
        firstInt.setHorizontalAlignment(SwingConstants.CENTER);
    }

    private void makeLayout() {
        add(firstInt);
    }

    public void actionPerformed(ActionEvent e) {    
    }
}

然后我使用名为GUI的其他类将我的JPanel添加到JFrame

import test.A1Panel;

public class GUI {
public static void main(String[] args) {       
    JFrame frame = new JFrame("Testing GUI"); 
    frame.setLayout( new GridLayout(1,3));

    JPanel panel = new A1Panel();
    panel.setBorder( BorderFactory.createRaisedBevelBorder() );
    frame.add( panel);

    frame.setSize(800,600);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    frame.pack();
    }
}

当我点击编译时,我得到的是一个带有三个面板的简单框架。我不明白为什么我的JLabel不在第一个面板中,因为我已将它添加到我的框架中。我错过了什么吗?

4 个答案:

答案 0 :(得分:2)

在实例A1Panel之后,您尚未调用A1Panel.init()

我建议删除init()并将所有代码添加到A1Panel的构造函数中。但是,如果您想保留init()功能,则需要在JPanel panel = new A1Panel()

之后调用它

答案 1 :(得分:2)

框架不是空的,面板是。我的代码中没有任何地方可以看到方法init()makeComponents()的调用。实际上,我会将init()方法转换为构造函数,如下所示:

public A1Panel() {
    makeComponents();
    makeLayout();
}

另一种替代方法是在声明panel.init()

后致电JPanel panel = new A1Panel()

答案 2 :(得分:1)

添加标签的代码实际上并未在主要调用,是吗?所以仔细看,什么时候实际调用init?

看看

private void makeLayout()

方法

答案 3 :(得分:1)

如果我将public void init()替换为A1Panel(),则可以完成工作。谢谢你的帮助。