Я пытаюсь сделать игру Connect Four, чтобы улучшить свои способности с помощью Java Graphics и школьного проекта. Фон для игры будет синим JPanel
, а игровым полем будет отдельный JPanel, который будет помещен поверх фона. Смотрите мои классы ниже:Weird output для графического кода
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
public class gameBoard extends JPanel {
private Board bored;
public gameBoard(){
setLayout(new BorderLayout());
bored = new Board();//does not appear in Center Region of gameBoard
add(bored, BorderLayout.CENTER);
}
public void paint(Graphics g){//This line is the one that is acting weird.
//blue rectangle board is here, but when repaint called
//JFrame turns blue and does not add new JPanel called above
g.setColor(Color.BLUE);
g.fillRect(0, 0, 1456, 916);
}
}
И
import java.awt.BasicStroke;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Graphics2D;
import javax.swing.JPanel;
public class Board extends JPanel {
/*
* 2d array will represent board and take 1's(red) and 2's(black) the nums
* represent pieces, with each redraw of the board, a check will be done to
* compare a sum against blackWin and redWin. Sum will be created by
* summing a continuous line of 1's or 2's going left -> right
*/
public int[][] boardEvalMatrix = new int[6][7];
private final int blackWin = 8, redWin = 4;
public Board() {//1200 x 764
BoardMethods a = new BoardMethods();
a.printBoard(getBoard());
JPanel panelLORDY = new JPanel(new FlowLayout());
repaint();
}
public int[][] getBoard(){
return boardEvalMatrix;
}
public void paint(Graphics g){
g.setColor(Color.BLUE);//Drawing background with actual board as a Test
g.fillRect(0, 0, 1456, 916);//will not remain like this
Graphics2D newG = (Graphics2D) g;
newG.setStroke(new BasicStroke(15));
g.setColor(Color.YELLOW);
for(int a = 0; a < 6; a++)//rows for board --- rowHeight is 127
g.drawRect(128, 68+ (a*127), 1200, 127);
//g.setColor(Color.BLACK);
//newG.setStroke(new BasicStroke(8));
//for(int a = 0; a < 7; a++)//columns for board --- columnWidth is 171
// g.drawRect(208, 152, 70, 10);
//g.drawLine(50,0, 1456, 916); //width 1456 length 916 - school computer monitors
}
}
Так что случилось это:
ПРОБЛЕМА 1:
Когда я включаю public void paint(Graphics g)
линию в gameBoard
класс, отображение, которое появляется при запуске драйвера, просто серое JFrame
, хотя звонок на номер repaint()
и метод paint()
пуст. Однако, когда я удалил строку, создав метод paint
, проблема исчезла, и появился соответствующий экран.
ПРОБЛЕМА 2:
Даже когда я разместил код, чтобы нарисовать синий прямоугольник в методе paint
gameBoard
в классе и называется repaint()
JFrame
был голубой цвет, который отчасти прав. Я знаю, что Java выполняет команды сверху вниз, поэтому я убедился, что код, добавляющий фактическую доску игры в gameBoard
JPanel
, появился после рисования синего прямоугольника, но он не работал.
ВОПРОС:
Что я сделал не так и как это исправить?
Так что просто быстрое разъяснение, в любое время, когда я использую 'paintComponent()' или 'paint()' Мне нужно называть их соответствующие supers? – Ungeheuer
Кстати, 'setBackground (Color.BLUE);' did not work. Рамка по-прежнему серая даже с этой строкой – Ungeheuer
@JohnnyCoder, создайте рамку, добавьте JPanel к кадру и установите цвет фона в СИНИЙ. Для этого потребуется около 5-10 строк кода. В вашем примере вы используете BorderLayout, а затем добавляете панель Board на панель GameBoard. Таким образом, вы видите серый цвет BoardPanel. Установите BoardPanel в СИНИЙ. Вопрос в том, почему вы используете две панели?'Не переопределять paint() !!!', только переопределять 'paintComponent()'. – camickr