簡體   English   中英

無法在JPanel上擴展類以在JFrame類中顯示

[英]Can't get a class extended on JPanel to show within a JFrame class

我正在嘗試創建一個模塊化的MVC swing應用。 因此,我有一個運行代碼的Main類,一個代表窗口的Frame類(擴展了JFrame ),並且其中包含一個包含我的GUI元素的類(擴展了JPanel )。 我的目標是在需要更改視圖時能夠輕松更新/重繪Panel類。

但是,由於我的代碼是正確的,因此它運行時沒有錯誤,並且打開了一個空的Frame,但是JPanel類中的元素無法顯示,我也不知道為什么。 -我知道,很可能是菜鳥的錯誤,但是我再也看不到它了。

所以這是我的主要課程:

package mvc;

public class Main {
    public static void main(String[] args)
    {
        new Frame();
    }
}

這是JFrame類

package mvc;

import java.awt.Container;

import javax.swing.JFrame;

public class Frame extends JFrame{
    private static int width = 500;
    private static int height  = 500;

    public Frame(){

        setResizable(false);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        Container pane = getContentPane();
        Panel game  = new Panel();      
        pane.add(game);     
        pack();

        setSize(width, height);
        setLocation(100,100);
        setVisible(true);
    }
}

這是JPanel

package mvc;

import java.awt.Container;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Panel extends JPanel {
    private JButton b1;
    private JLabel l1;

    public Panel(){
        Container pane = new JPanel();
        b1 = new JButton("Button");
        pane.add(b1);
        l1 = new JLabel("Label for the button");
        pane.add(l1);
    }   
}

我不確定為什么要這么做...

public Panel(){
    Container pane = new JPanel();
    b1 = new JButton("Button");
    pane.add(b1);
    l1 = new JLabel("Label for the button");
    pane.add(l1);
}  

但是您沒有將pane添加到任何內容,因此屏幕上未顯示任何內容

只做類似的事情會更容易...

public Panel(){
    b1 = new JButton("Button");
    add(b1);
    l1 = new JLabel("Label for the button");
    add(l1);
}  

您還應該僅在事件調度線程的上下文內創建和修改UI,請查看初始線程以了解更多詳細信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM