0
기본적으로 JPanel 그리드 행렬에 원을 추가하려고합니다 (이것이 내 주요 문제가되는 곳입니다). 아래 코드를 실행하면 새로운 OvalComponent 클래스가 호출되어 그리드의 (1,1) 위치에 원을 추가하면 클래스가 읽히지 만 페인트 구성 요소 기능은 건너 뜁니다. 구성 요소가 추가 된 상태가 0x0
의 크기와 추가 된 및 스윙은 그것을 칠 필요가 없다는 것을 알 수있을만큼 영리하므로Java - paintComponent는 런타임 중에 읽히지 만 구현되지 않습니다.
package Exercises;
import javax.swing.*;
import java.awt.*;
import java.io.FileNotFoundException;
/**
* Created by user on 4/1/2017.
*/
public class Mazes extends JPanel {
public static void main(String[] args) throws FileNotFoundException {
Mazes maze = new Mazes();
}
public Mazes() throws FileNotFoundException{
Boolean[][] maze = Exercise4.readMaze();
int row = maze.length;
JFrame f = new JFrame("Maze");
f.setLayout(new GridLayout(row, row));
JPanel[][] grid = new JPanel[row][row];
for (int i = 0; i < row; i++) {
for (int j = 0; j < row; j++) {
grid[i][j] = new JPanel();
grid[i][j].setOpaque(true);
if ((i==1&&j==1) || (i==row-1 && j==row-1))
grid[i][j].add(new OvalComponent());
if (maze[i][j].equals(false)){
grid[i][j].setBackground(Color.BLACK);}
else grid[i][j].setBackground(Color.WHITE);
f.add(grid[i][j]);
}
}
//f.add(new JButton("Reset"), BorderLayout.SOUTH);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}
class OvalComponent extends JComponent {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLUE);
g.fillOval(4, 4, 10, 10);
}
}