gpt4 book ai didi

java - JPanel 未显示

转载 作者:行者123 更新时间:2023-11-29 08:43:27 25 4
gpt4 key购买 nike

我在以下类(class)中遇到了一些问题:我的问题是 JPanel 没有在 JFrame 上呈现。

这是源代码:

MainFrame.class

import javax.swing.JFrame;
import javax.swing.JPanel;

public class MainFrame extends JFrame {

JPanel panel;

public MainFrame() {
setTitle("TestFrame");
setLayout(null);
setSize(800, 450);
setLocation(400, 225);
setDefaultCloseOperation(EXIT_ON_CLOSE);

panel = new TestPanel();
getContentPane().add(panel);
panel.setLocation(0, 0);
panel.setSize(64, 64);
panel.setVisible(true);

setLocationRelativeTo(null);
setVisible(true);
}

public void start() {
while(true) {
panel.repaint();

try {
Thread.sleep(20);
} catch(InterruptedException e) {
e.printStackTrace();
}
}
}

public static void main(String[] args) {
MainFrame frame = new MainFrame();
frame.start();
System.exit(-1);
}
}

测试面板类

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;

public class TestPanel extends JPanel {

@Override
public void paintComponents(Graphics g) {
super.paintComponent(g);

g.setColor(Color.BLUE);
g.drawString("Test", 0, 0);
}
}

为什么不能正常工作?

已修复。都是因为代码质量差。

最佳答案

您已经覆盖了 paintComponents 方法而不是 paintComponent(没有“s”)。

您的无限循环 while(true) 正在阻塞 EDT 线程,这将卡住 GUI。您需要在新线程上运行它,或者更好的解决方案是使用 javax.swing.Timer 来刷新面板。

此外,正如@CoderinoJavarino 提到的,您需要将 drawString(....) 调用中的 y 坐标设置为更大的值。

正如文档中提到的:

The baseline of the leftmost character is at position (x, y)

你可以做这样的事情来确保文本不会被绘制到屏幕外:

g.drawString("Test", 0, g.getFontMetrics().getHeight());

关于java - JPanel 未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38295707/

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