У менять есть кнопка Start, в ней я создаю объект и добавляю его для видимости (и это работает), есть другая кнопка newGame, по сути я там делаю тоже самое, но нужного эффекта нету (мне надо что бы мое поле с прорисовкой создалось заново, и игра началась повторно). Как мне написать, что бы по нажатию на newGame, игра начиналась заново?
Класс по созданию GUI
public class Start extends JFrame{
static String text;
private static JPanel gameField;
public Start(){
gameField = new GameField();
setSize(500, 620);
setLocationRelativeTo(null);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setTitle("крестики нолики");
JPanel fieldWelcome = new JPanel(); //поле с приветствием
JPanel fieldSetting = new JPanel(); //поле с настройками для игры
JPanel background = new JPanel(); //
JButton enter = new JButton("Запомнить");
JButton start = new JButton("Играть"); //для применения настроек
JButton newGame = new JButton("Начать заново"); //новая игра
JTextField textName = new JTextField("Имя",20); //главный игрок
JTextField textName2 = new JTextField("Имя соперника",20); //имя соперника
JLabel textWelcome = new JLabel("Добро пожаловать," +
" пожалуйста вветите Ваше имя"); //Lable приветствия в окне fieldWelcome
JLabel imageLabel = new JLabel(new ImageIcon("pictures/cross.png")); //фоновое изображение для Welcome
JLabel imageLabel2 = new JLabel(new ImageIcon("pictures/zero.png")); //фоновое изображение для Setting
JLabel textSetting = new JLabel("здравствуйте, выберите как вы желаете играть"); //приветствие в окне fieldSetting
JRadioButton AI = new JRadioButton("с компьютером"); //
JRadioButton friend = new JRadioButton("с другом"); //
//настройки цвета и размера
textWelcome.setFont(new Font("Serif", Font.PLAIN, 22));
enter.setPreferredSize(new Dimension(1,40));
enter.setBackground(new Color(255, 251, 90));
start.setPreferredSize(new Dimension(1,40));
start.setBackground(new Color(255, 251, 90));
newGame.setPreferredSize(new Dimension(1,40));
newGame.setBackground(new Color(255, 251, 90));
fieldWelcome.setBackground(Color.orange);
fieldSetting.setBackground(Color.orange);
textName.setBackground(new Color(248,255, 87));
textName2.setBackground(new Color(248,255, 87));
textSetting.setFont(new Font("Serif", Font.PLAIN, 20));
AI.setFont(new Font("Serif", Font.PLAIN, 18));
AI.setBackground(Color.orange);
friend.setFont(new Font("Serif", Font.PLAIN, 18));
friend.setBackground(Color.orange);
friend.setSelected(true);
background.setBackground(Color.orange);
//добавление всех элементов
ButtonGroup buttonGroup = new ButtonGroup();
buttonGroup.add(AI);
buttonGroup.add(friend);
add(enter, BorderLayout.SOUTH);
fieldWelcome.add(textWelcome);
fieldWelcome.add(textName);
fieldWelcome.add(imageLabel);
fieldSetting.add(textSetting);
fieldSetting.add(AI);
fieldSetting.add(friend);
fieldSetting.add(textName2);
textName2.setVisible(false);
fieldSetting.add(imageLabel2);
add(fieldWelcome);
if (friend.isSelected() == true) { //временный костыль
textName2.setVisible(true);
} else return;
enter.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
fieldWelcome.setVisible(false);
enter.setVisible(false);
add(fieldSetting);
fieldSetting.setVisible(true);
add(start, BorderLayout.SOUTH);
text = textName.getText(); //запись имени в переменную text,
//для дальнейшего его использования
}
});
start.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(text + " " + textName.getText()); //вывел информацию в консоль для проверки,
//что запись действительно происходит
fieldSetting.setVisible(false);
start.setVisible(false);
add(newGame, BorderLayout.SOUTH);
JPanel gameField;
gameField = new GameField();
add(gameField);
}
});
newGame.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
add(newGame, BorderLayout.SOUTH);
JPanel gameField;
gameField = new GameField();
add(gameField);
}
});
setVisible(true);
}
}
класс с прорисовкой
public class GameField extends JPanel {
private int width;
private int height;
private final int SIZE = 3;
private int cellWidth;
private int cellHeight;
private char [][] map;
private boolean moveX = true;
int clX;
int clY;
public GameField() {
setOpaque(false);
map = new char[SIZE][SIZE];
addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
clX = e.getX() / cellWidth;
clY = e.getY() / cellHeight;
System.out.println((clX + 1) + " " + (clY + 1));
if (map[clX][clY] == 0) { // only if empty cell
if (moveX) {
map[clX][clY] = 'x';
} else {
map[clX][clY] = 'o';
}
moveX = !moveX;
repaint();
}
if (isMapFull()){
System.out.println("ничья");
}
if (checkWin(map[clX][clY])){
System.out.println("кто-то выйграл");
}
}
});
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
width = getWidth();
height = getHeight();
cellHeight = height/SIZE;
cellWidth = width/SIZE;
BufferedImage myPictureKrestic = null;
try {
myPictureKrestic = ImageIO.read(new File("pictures/cross.png"));
} catch (IOException e) {
e.printStackTrace();
}
BufferedImage myPictureNolik = null;
try {
myPictureNolik = ImageIO.read(new File("pictures/zero.png"));
} catch (IOException e) {
e.printStackTrace();
}
for (int i = 0; i < SIZE; i++) {
g2d.setColor(Color.black);
g2d.drawLine(0, i*cellHeight, width, i*cellHeight);
g2d.drawLine(i*cellWidth,0,i*cellWidth,height);
}
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
if ((map[i][j] == 'x')) {
g2d.drawImage(myPictureKrestic, i * cellWidth, j * cellHeight, cellWidth, cellHeight, null);
} else if ((map[i][j] == 'o')) {
g2d.drawImage(myPictureNolik, i * cellWidth, j * cellHeight, cellWidth, cellHeight, null);
}
}
}
}
public boolean isMapFull(){
for(int i=0; i < SIZE; i++){
for(int j=0;j <SIZE; j++){
if(map[i][j] == 0) return false;
}
}
return true;
}
public boolean checkWin (char symb) {
if(map[0][0] == symb && map[0][1] == symb && map[0][2] == symb) return true;
if(map[1][0] == symb && map[1][1] == symb && map[1][2] == symb) return true;
if(map[2][0] == symb && map[2][1] == symb && map[2][2] == symb) return true;
if(map[0][0] == symb && map[1][1] == symb && map[2][2] == symb) return true;
if(map[0][0] == symb && map[1][0] == symb && map[2][0] == symb) return true;
if(map[0][1] == symb && map[1][1] == symb && map[2][1] == symb) return true;
if(map[2][0] == symb && map[1][1] == symb && map[0][2] == symb) return true;
if(map[0][2] == symb && map[1][2] == symb && map[2][2] == symb) return true;
return false;
}
}
start:
start.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(text + " " + textName.getText()); //вывел информацию в консоль для проверки,
//что запись действительно происходит
fieldSetting.setVisible(false);
start.setVisible(false);
add(newGame, BorderLayout.SOUTH);
// JPanel gameField;
gameField = new GameField();
add(gameField);
}
});
newGame:
newGame.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// add(newGame, BorderLayout.SOUTH); // зачем добавлять ту же кнопку каждый раз? Она и так останется
// JPanel gameField;
remove(gameField);
gameField = new GameField();
add(gameField);
gameField.revalidate();
}
});
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть клиент и сервер на Java RMIКлиент считывает текст с консоли через Scanner
Занимаюсь формирование docx\odt файлов по средствам javaВозник вопрос: как можно вставить вложение (OLE объект) в docx\odt файл
У меня есть viewpager по горизонтали и я хочу по вертикали обработать swipe, как это реализовать ? Я пытался обработать swipe но viewpager мешает отслеживать...
Мне нужно убрать прогресс бар из refreshlayout та или сделать невидимымКак растянуть и отпускать layout и обработать refresh без прогресс бара?