У меня есть JPanel, метод paintComponent (Graphics g) не вызывается. Я знаю, что это обычная проблема, но ни один из предложений, которые я нашел до сих пор, не смог исправить. Вот код для JPanel:Java JPanel paintComponent (Графика g) не называется
import javax.swing.*;
import java.awt.*;
public class Grid extends JPanel
{
Candy[][] gridRep = new Candy[8][8];
public Grid()
{
this.setLayout(new GridLayout(8,8));
this.populateRandom();
this.repaint();
}
...
public void paintComponent(Graphics g){
Graphics2D g2 = (Graphics2D)g;
for (int r = 0; r<8; r++){
for (int c = 0; c<8; c++){
g2.setColor(gridRep[r][c].getColor());
g2.drawOval(getXCoordinate(gridRep[r][c])*15, getYCoordinate(gridRep[r][c])*15, 10, 10);
System.out.println("repainting");
}
}
}
}
Как вы можете видеть, я называю перекрасить() в конструкторе, но ничего не делает. Я также называю это волей-неволей в классе JFrame, который создает объект этого класса:
import javax.swing.*;
import java.awt.*;
public class Game
{
private Grid grid;
private JFrame frame;
public Game(){
this.makeFrame();
}
private void makeFrame(){
grid = new Grid();
frame = new JFrame ("Frame");
Container contentPane = frame.getContentPane();
contentPane.setLayout(new FlowLayout());
//grid.paint(grid.getGraphics());
grid.repaint();
frame.add(grid);
grid.repaint();
frame.pack();
grid.repaint();
frame.setVisible(true);
grid.repaint();
}
Картина в свинг представляет собой сложную цепь класса метода, вы должны вызвать 'super.paintXxx' иначе вы будете испытывать случайный и трудно повторить вопросы живописи. Взгляните на [Живопись в AWT и Swing] (http://www.oracle.com/technetwork/java/painting-140037.html) для получения более подробной информации – MadProgrammer