1

我想用 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) {    
    }
}

然后JPanel,我JFrame使用另一个名为 GUI 的类将我的添加到我的:

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

4 回答 4

2

实例化 A1Panel 后,您还没有调用A1Panel.init()

我建议删除init()所有代码并将其添加到A1Panel. 但是,如果您想保留该init()函数,则需要在之后调用它JPanel panel = new A1Panel()

于 2012-11-22T21:21:45.283 回答
2

框架不是空的,面板是。在您的代码中,我没有看到对方法init()makeComponents(). 实际上,我会将您的init()方法变成构造函数,如下所示:

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

另一种选择是panel.init()在声明后调用JPanel panel = new A1Panel()

于 2012-11-22T21:26:46.500 回答
1

添加标签的代码实际上并没有在 main 中调用,是吗?所以仔细看,init 是什么时候真正调用的?

看着那(这

private void makeLayout()

方法。

于 2012-11-22T21:21:02.653 回答
1

如果我替换public void init()A1Panel(),它就可以完成工作。谢谢您的帮助。

于 2012-11-22T21:26:20.087 回答