的paintComponent不会被调用在JPanel的
问题描述:
我有以下代码:paint()方法的paintComponent不会被调用在JPanel的
package hra;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import static javax.swing.JFrame.EXIT_ON_CLOSE;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class HerniPole extends JPanel implements KeyListener
{
public int velikostPole;
HerniPole(int velikostPole)
{
this.velikostPole = velikostPole;
Color background = new Color(187, 173, 163);
EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex)
{
System.err.println("Error!");
}
}
});
JFrame frame = new JFrame();
frame.setLocationRelativeTo(null);
frame.setResizable(false);
frame.setTitle("2048");
frame.getContentPane().setBackground(background);
frame.setSize(450, 450);
frame.addKeyListener(this);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setVisible(true);
}
@Override
public void paintComponent(Graphics g)
{
System.out.println("xD");
g.setColor(Color.BLACK);
g.drawRect(20, 20, 20, 20);
g.setColor(Color.yellow);
}
@Override
public void keyTyped(KeyEvent ke)
{
System.out.println(ke.getKeyCode());
}
@Override
public void keyPressed(KeyEvent ke)
{
}
@Override
public void keyReleased(KeyEvent ke)
{
}
}
和的paintComponent()不会被调用,也甚至重绘()。我究竟做错了什么?我试过在StackOverflow上找到的所有东西,但没有任何工作。如何解决这个问题?谢谢。
答
你错过了几件事情:
你没有一个main
方法(或者可能是你有,但并没有将它张贴在你的问题)并没有建立HerniPole
实例。 添加main
方法是这样的:
public static void main(String[] args) {
new HerniPole(0);
}
你没有你的HerniPole
实例添加到您的JFrame
。 做,在构造函数中,frame.setVisible(true);
frame.add(this);
+0
对不起,我忘了发布我的main,frame.add(this);帮助过我。谢谢! – esea123
您创建一个JFrame,并使其可见之前的某个地方。但是你没有添加任何组件。也许你应该创建一个HerniPole的实例并将其添加到你的JFrame中? – VGR