我想用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
不在第一个面板中,因为我已将它添加到我的框架中。我错过了什么吗?
答案 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()
,则可以完成工作。谢谢你的帮助。