gpt4 book ai didi

java - JPanel 在 JFrame 中不可见

转载 作者:行者123 更新时间:2023-11-30 03:33:24 25 4
gpt4 key购买 nike

我知道有人问过此类问题,但我找不到任何解决方案。

我正在尝试在 JPanel 中绘制一些动画,该动画将位于 JFrame 中。 JPanel 不可见,JFrame 以及我放入其中的测试标签可见。另外,由于某种原因我无法设置 JFrame 背景。这是不起作用的代码:(构造函数位于项目中的另一个类中)。

public class WindowClass extends JPanel implements ActionListener{

Graphics graphics;
JFrame window;
Timer timer;

private JLabel label = new JLabel("Best Label Around");
private int height;
private int width;
private Color bgColor;


public void init(){

window = new JFrame("Jumping Balls");
window.add(this);
window.add(label);
this.setSize(150,150);
window.setSize(500, 300);
window.setDefaultCloseOperation(window.EXIT_ON_CLOSE);
window.setVisible(true);
setVisible(true);
//timer = new Timer(100, this); //TODO
//timer.start();

}

public void paintComponent(Graphics g){
super.paintComponent(g);
setBackground(Color.BLUE);
}

顺便说一句 - 这是另一个非常相似的另一个程序的代码,它确实有效,我不知道为什么,它真的让我大吃一惊..这是他的一些代码:

public class ShowClass extends JPanel implements ActionListener{

int count=0;

Graphics graphics;
JFrame window;
Timer timer;
Random random = new Random();

Color generalColor = Color.BLACK;

int wHeight = 400;
int wWidth = 550;

final int MAXSIZE = 60; //Ball's Maximum Size

//BackGround colors
int randomRed = 100;
int randomGreen = 100;
int randomBlue = 100;

//Ball colors
int randomBallRed = 255;
int randomBallGreen = 255;
int randomBallBlue = 255;

public void init(){

window = new JFrame("Jumping Balls");
window.add(this);
window.setSize(wHeight, wWidth);
window.setDefaultCloseOperation(window.EXIT_ON_CLOSE);
window.setVisible(true);

timer = new Timer(100, this); //TODO
timer.start();

}

public void paintComponent(Graphics g){
super.paintComponent(g);
setBackground(new Color(randomRed,randomGreen,randomBlue));

for(Ball b : ManagerClass.balls){
//b.setBallColor(new Color(randomRed,randomGreen,randomBlue)); TODO
g.setColor(b.getBallColor());
g.fillOval((int)b.getLocation().getX(),(int)b.getLocation().getY(),b.getHeight(),b.getWidth());
}

}

谢谢!

最佳答案

默认情况下,您的窗口(具体来说,窗口的内容 Pane )使用 BorderLayout 布局管理器。

BorderLayout 有五个位置 - 顶部、底部、左侧、右侧和中心。当您将组件添加BorderLayout时,如果您未指定位置,则默认为居中。每个位置只能放置一个组件。

这个:

window.add(this);
window.add(label);

this添加到中心位置。然后,它将 label 添加到中心位置 - 这会删除 this,因为只有一个组件可以位于中心。

您可以使用不同的布局管理器(超出了本答案的范围),或者继续使用 BorderLayout 并显式设置位置。后者的示例,假设您希望标 checkout 现在面板上方:

window.add(this, BorderLayout.CENTER); // or just window.add(this);
window.add(label, BorderLayout.NORTH);

关于java - JPanel 在 JFrame 中不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28514055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com