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) {    
    }
}

次に、 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();
    }
}

コンパイルを押すと、3つの空のパネルがある単純なフレームが表示されます。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

ラベルを追加するコードは、実際にはメインで呼び出されていませんでしたね。では、注意深く見てください。initが実際に呼び出されるのはいつですか。

見て

private void makeLayout()

方法。

于 2012-11-22T21:21:02.653 に答える
1

に置き換えるpublic void init()A1Panel()、うまくいきます。ご協力ありがとうございました。

于 2012-11-22T21:26:20.087 に答える