我对此代码有疑问。由于某种原因,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类,它具有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的东西。
非常感谢,很长一段时间都在处理这个问题。
答案 0 :(得分:0)
您需要将面板添加到框架中:
public Robotron ()
{
//add(this); This one gave me an error
setSize(800, 600);
add(new TestFrame());
setVisible(true);
}
答案 1 :(得分:0)
由于此原因,您未向JFrame添加任何内容
//add(this);
在这里,您试图将组件添加到自身,这不会飞。
相反,您需要将TestFrame实例添加到Frame。
add(new TestFrame());
setSize(800, 600);
setVisible(true);
答案 2 :(得分:0)
正如其他人所说,您需要将面板添加到框架中:
public Robotron() {
add(new TestFrame());
setSize(800, 600);
setVisible(true);
}
由于其他人没有提到 ,您需要在被覆盖的方法中首先调用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
方法。