簡體   English   中英

Jframe 上未顯示 JPanel 更改

[英]JPanel changes not showing on Jframe

您好,我正在嘗試使用 JPanel 和 JFrame 創建 java 游戲。 但是我無法讓 JPanel 顯示我對其所做的更改。 我想知道我是否可能將 JFrame 設置錯誤或添加不當或類似的東西。

這是我的 window class:

import javax.swing.*;
import java.awt.*
public class Window extends Canvas {

public static final int ScreenWidth = 1000;
public static final int ScreenHeight = 700;
public static JFrame frame;

Window(int ScreenWidth, int ScreenHeight, JFrame frame) {
    this.frame = frame;
    displaywindow();
    frame.add(this);
}

public void paint(Graphics g) {
    super.paint(g);
}

public void displaywindow() {
    this.frame.setPreferredSize(new Dimension(ScreenWidth,ScreenHeight));
    this.frame.setMaximumSize(new Dimension(ScreenWidth,ScreenHeight));
    this.frame.setMinimumSize(new Dimension(ScreenWidth,ScreenHeight));
    this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.frame.setResizable(false);
    this.frame.setBackground(Color.pink);
    this.frame.setLocationRelativeTo(null);
}

public JFrame getFrame() {
    return this.frame;
}

}

這是我正在處理的菜單 class:

public class Menu extends JPanel implements ActionListener, KeyListener {
private Window win = new Window(Window.ScreenWidth, Window.ScreenHeight, Window.frame);
private int width = Window.frame.getContentPane().getWidth();
private int height = Window.frame.getContentPane().getHeight();
BufferedImage bg;
  
Menu(JPanel panel) {
    this.panel = panel;
}
@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);

    g.fillRect(110, 110, 20, 20);
}


public void init() throws IOException {
    this.panel.setBackground(Color.cyan);
    this.panel.setPreferredSize(new Dimension(width, height));
    this.panel.setMaximumSize(new Dimension(width, height));
    this.panel.setMinimumSize(new Dimension(width, height));
    JLabel start = new JLabel("Start");
    start.setFont(new Font("Verdana", Font.PLAIN, 50));
    start.setLocation(500, 400);
    this.panel.add(new JLabel("Exit"));
    this.panel.add(start);
    this.panel.revalidate();
    this.panel.repaint();
    this.panel.setVisible(true);
}

enter code here
public static void main(String[] args) throws IOException {
    
    Window win = new Window(Window.ScreenWidth, Window.HEIGHT, new JFrame());
    Menu mene = new Menu();
    mene.init();
    win.getFrame().getContentPane().add(mene);
    win.getFrame().setVisible(true);

}

我嘗試向paintComponent 添加一個矩形,以便確定面板實際上已添加到框架中並且它顯示它確實如此,但是我在init() 中所做的任何更改都沒有真正顯示出來。 任何幫助將非常感激。

`

問題是您同時執行class Menu extends JPanel並在Menu class 內聲明JPanel panel 這種重復是不必要的,並且會導致問題,因為您將項目添加到panel字段,但您從未對該面板執行任何操作。

另一方面,您聲明Menu mene並將其添加到內容窗格,但您從未向Menu object 本身添加任何內容。 不要這樣混搭。 選擇一個字段成員或 inheritance,但不能同時選擇兩者。

暫無
暫無

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

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