1

このパネルを追加しようとしています:

import javax.swing.*;
import java.awt.*;

class TopPanel extends JPanel{
    public TopPanel() {
        JPanel panel = new JPanel();
        JLabel label = new JLabel("Course Lookup GUI");
        panel.add(label);
        panel.setVisible(true);
    }
}

このようなフレームに:

import javax.swing.*;
import java.awt.*;

class CourseGUI extends JFrame{
    public CourseGUI() {
        this.setLayout(new FlowLayout());
        this.setLocation(200,200);

        TopPanel    tPan = new TopPanel();
        MiddlePanel mPan = new MiddlePanel();

        this.add(tPan);
        this.add(mPan);

        this.setVisible(true);
    }

    public static void main(String[] args){
        CourseGUI cGUI = new CourseGUI();
    }
}

しかし、フレームには何も追加されておらず、空のウィンドウが表示されています。私は何を間違っていますか?

4

2 に答える 2

4

クラスはすでに JPanel を拡張しているため、別のパネルを作成する必要はありません。クラス自体にラベルを追加するだけです

class TopPanel extends JPanel{
    public TopPanel() {
        //JPanel panel = new JPanel();
        JLabel label = new JLabel("Course Lookup GUI");
        add( label );
        //panel.add(label);
        //panel.setVisible(true);
    }
}

私もReimeusさんの意見に賛成です。この機能を実行するために JPanel を拡張する必要はありません。ただ行う:

JPanel tPan = new JPanel;
JLabel label = new JLabel("Course Lookup GUI");
tPan.add(label);
this.add( tPan );

または、パネルに 1 つのコンポーネントを追加するだけなので、さらに簡単です。パネルを作成する必要さえありません。ただ行う:

JLabel label = new JLabel("Course Lookup GUI");
this.add( label );
于 2013-05-01T23:52:49.327 に答える
2

panelをコンテナに追加する必要がありますTopPanel

add(panel);

現在、 に新しい機能を追加していないため、サブクラス化JPanelの代わりに の直接インスタンスを使用できます。JPanel通話panel.setVisible(true)は不要です。最上位ウィンドウが表示されると、Swing は必要なコンポーネントを表示します。

于 2013-05-01T23:02:47.143 に答える