为什么 paintComponent 不起作用?
Why paintComponent doesn't work?
我在使用这段代码时遇到问题。出于某种原因,paintComponent(Graphics g)
根本不起作用,而且似乎没有如何强制它的答案。这是我的代码:
import javax.swing.JFrame;
public class Robotron extends JFrame
{
public Robotron ()
{
//add(this); This one gave me an error
setSize(800, 600);
new TestFrame();
setVisible(true);
}
public static void main(String [ ] args)
{
new Robotron();
}
这是我的 TestFrame class,它具有 paintComponent 功能:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
public class TestFrame extends JPanel
{
public void paintComponent(Graphics g)
{
g.setColor(Color.BLACK);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.YELLOW);
g.fillRect(100, 100, 10, 30);
System.out.println("Abdullah Paint");
}
public TestFrame()
{
setFocusable(true);
repaint();
}
}
我该怎么做才能让 paintComponent 真正发挥作用。我最后得到的只是一个空的 JFrame,没有 运行 的 System.out.println 东西。
非常感谢,解决这个问题很久了。
您需要将面板添加到框架中:
public Robotron ()
{
//add(this); This one gave me an error
setSize(800, 600);
add(new TestFrame());
setVisible(true);
}
您没有向 JFrame 添加任何内容,因此
//add(this);
在这里,您试图将组件添加到自身,但它不会飞。
相反,您需要将 TestFrame 实例添加到框架中。
add(new TestFrame());
setSize(800, 600);
setVisible(true);
正如其他人所说,您需要将面板添加到框架中:
public Robotron() {
add(new TestFrame());
setSize(800, 600);
setVisible(true);
}
正如其他人所提到的 not,您需要在覆盖的方法中调用 super.paintComponent(g)
第一件事:
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLACK);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.YELLOW);
g.fillRect(100, 100, 10, 30);
System.out.println("Abdullah Paint");
}
备注:
- 不要在构造函数中调用
repaint()
。充其量它什么都不做。
- 不要为框架调用
setSize(...)
,而是调用 pack()
。为此,您需要覆盖面板中的 getPreferredSize
方法。
我在使用这段代码时遇到问题。出于某种原因,paintComponent(Graphics g)
根本不起作用,而且似乎没有如何强制它的答案。这是我的代码:
import javax.swing.JFrame;
public class Robotron extends JFrame
{
public Robotron ()
{
//add(this); This one gave me an error
setSize(800, 600);
new TestFrame();
setVisible(true);
}
public static void main(String [ ] args)
{
new Robotron();
}
这是我的 TestFrame class,它具有 paintComponent 功能:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
public class TestFrame extends JPanel
{
public void paintComponent(Graphics g)
{
g.setColor(Color.BLACK);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.YELLOW);
g.fillRect(100, 100, 10, 30);
System.out.println("Abdullah Paint");
}
public TestFrame()
{
setFocusable(true);
repaint();
}
}
我该怎么做才能让 paintComponent 真正发挥作用。我最后得到的只是一个空的 JFrame,没有 运行 的 System.out.println 东西。
非常感谢,解决这个问题很久了。
您需要将面板添加到框架中:
public Robotron ()
{
//add(this); This one gave me an error
setSize(800, 600);
add(new TestFrame());
setVisible(true);
}
您没有向 JFrame 添加任何内容,因此
//add(this);
在这里,您试图将组件添加到自身,但它不会飞。
相反,您需要将 TestFrame 实例添加到框架中。
add(new TestFrame());
setSize(800, 600);
setVisible(true);
正如其他人所说,您需要将面板添加到框架中:
public Robotron() {
add(new TestFrame());
setSize(800, 600);
setVisible(true);
}
正如其他人所提到的 not,您需要在覆盖的方法中调用 super.paintComponent(g)
第一件事:
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLACK);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.YELLOW);
g.fillRect(100, 100, 10, 30);
System.out.println("Abdullah Paint");
}
备注:
- 不要在构造函数中调用
repaint()
。充其量它什么都不做。 - 不要为框架调用
setSize(...)
,而是调用pack()
。为此,您需要覆盖面板中的getPreferredSize
方法。