2017-06-15 75 views
0

我有以下代码: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上找到的所有东西,但没有任何工作。如何解决这个问题?谢谢。

+0

您创建一个JFrame,并使其可见之前的某个地方。但是你没有添加任何组件。也许你应该创建一个HerniPole的实例并将其添加到你的JFrame中? – VGR

回答

1

你错过了几件事情:

你没有一个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

相关问题