Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
2 / 2 / 2
Регистрация: 14.10.2013
Сообщений: 49
1

Доска шахматная кнопки

12.01.2016, 23:02. Показов 1677. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import java.awt.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
import javax.swing.border.*;
 
public class ChessBoardWithColumnsAndRows {
 
    private final JPanel gui = new JPanel(new BorderLayout(3, 3));
    private JButton[][] chessBoardSquares = new JButton[8][8];
    private JPanel chessBoard;
    private final JLabel message = new JLabel(
            "Chess Champ is ready to play!");
    private static final String COLS = "ABCDEFGH";
 
    ChessBoardWithColumnsAndRows() {
        initializeGui();
    }
 
    public final void initializeGui() {
        // set up the main GUI
        gui.setBorder(new EmptyBorder(5, 5, 5, 5));
        JToolBar tools = new JToolBar();
        tools.setFloatable(false);
        gui.add(tools, BorderLayout.PAGE_START);
        tools.add(new JButton("New")); // TODO - add functionality!
        tools.add(new JButton("Save")); // TODO - add functionality!
        tools.add(new JButton("Restore")); // TODO - add functionality!
        tools.addSeparator();
        tools.add(new JButton("Resign")); // TODO - add functionality!
        tools.addSeparator();
        tools.add(message);
 
        gui.add(new JLabel("?"), BorderLayout.LINE_START);
 
        chessBoard = new JPanel(new GridLayout(0, 9));
        chessBoard.setBorder(new LineBorder(Color.BLACK));
        gui.add(chessBoard);
 
        // create the chess board squares
        Insets buttonMargin = new Insets(0,0,0,0);
        for (int ii = 0; ii < chessBoardSquares.length; ii++) {
            for (int jj = 0; jj < chessBoardSquares[ii].length; jj++) {
                JButton b = new JButton();
                b.setMargin(buttonMargin);
                // our chess pieces are 64x64 px in size, so we'll
                // 'fill this in' using a transparent icon..
                ImageIcon icon = new ImageIcon(
                        new BufferedImage(64, 64, BufferedImage.TYPE_INT_ARGB));
                b.setIcon(icon);
                if ((jj % 2 == 1 && ii % 2 == 1)
                        //) {
                        || (jj % 2 == 0 && ii % 2 == 0)) {
                    b.setBackground(Color.WHITE);
                } else {
                    b.setBackground(Color.BLACK);
                }
                chessBoardSquares[jj][ii] = b;
            }
        }
 
        //fill the chess board
        chessBoard.add(new JLabel(""));
        // fill the top row
        for (int ii = 0; ii < 8; ii++) {
            chessBoard.add(
                    new JLabel(COLS.substring(ii, ii + 1),
                    SwingConstants.CENTER));
        }
        // fill the black non-pawn piece row
        for (int ii = 0; ii < 8; ii++) {
            for (int jj = 0; jj < 8; jj++) {
                switch (jj) {
                    case 0:
                        chessBoard.add(new JLabel("" + (ii + 1),
                                SwingConstants.CENTER));
                    default:
                        chessBoard.add(chessBoardSquares[jj][ii]);
                }
            }
        }
    }
 
    public final JComponent getChessBoard() {
        return chessBoard;
    }
 
    public final JComponent getGui() {
        return gui;
    }
 
    public static void main(String[] args) {
        Runnable r = new Runnable() {
 
            @Override
            public void run() {
                ChessBoardWithColumnsAndRows cb =
                        new ChessBoardWithColumnsAndRows();
 
                JFrame f = new JFrame("ChessChamp");
                f.add(cb.getGui());
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f.setLocationByPlatform(true);
 
                // ensures the frame is the minimum size it needs to be
                // in order display the components within it
                f.pack();
                // ensures the minimum size is enforced.
                f.setMinimumSize(f.getSize());
                f.setVisible(true);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}
Есть нарисованное шахматное поле
Как сделать, что бы по клику на кнопку(button или клик мышки не важно) поля меняли местами свой цвет(белые с черным)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.01.2016, 23:02
Ответы с готовыми решениями:

SWING шахматная доска
Здравствуйте. Есть намерение реализовать на java в учебных целях шашки. Сейчас пишу компонент...

Шахматная доска и фигуры
Собственно надоели теория и мелкие задачки. Решил написать что-нибудь интересное. Первое что...

шахматная доска
Вывести таблицу с цветом фона подобным шахматной доске. код оформить в виде функции, которая будет...

шахматная доска
Здравствуйте! Есть задача: дана шахматная доска размером NxN, нужно расставить N ферзей таким...

4
10 / 11 / 6
Регистрация: 11.05.2015
Сообщений: 101
13.01.2016, 00:38 2
участок кода который разукрашивает доску в черный и белый цвет выносим в отдельный метод, в методе делаем проверку - если ячейки с таким то расположением черные, то сделать их белыми, и наоборот, таким образом при каждом вызове метода (нажатие на кнопку) у нас будет инверсия цвета всех ячеек на противоположный
0
2 / 2 / 2
Регистрация: 14.10.2013
Сообщений: 49
13.01.2016, 00:45  [ТС] 3
у меня проблемы с написанием кода)
Может кто помочь?
0
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
13.01.2016, 10:06 4
Я бы конечно всё по другому делал, но помню когда сам начинал, и мне пихали другой код, а не мои исправленый, я мягко говоря, расстраивался. Поэтому я пофиксил ваш код слегка.

Что я сделал:
1) Добавил переменную, которая содержит флаг, который указывает какой цвет первый;
2) Вынес прорисовку доски в отедельный метод, чтоб его можно было вызывать сколько угодно раз;
3) Добавил слушатель на кнопку "Resign", при нажатии на котору цвета меняется и вызывает прорисока доски в зависимости от флага;
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.time.temporal.IsoFields;
import javax.swing.*;
import javax.swing.border.*;
 
public class ChessBoardWithColumnsAndRows implements ActionListener {
 
    private final JPanel gui = new JPanel(new BorderLayout(3, 3));
    private JButton[][] chessBoardSquares = new JButton[8][8];
    private JPanel chessBoardPanel;
    private JPanel chessBoard;
    private final JLabel message = new JLabel("Chess Champ is ready to play!");
    private static final String COLS = "ABCDEFGH";
    private JButton resigButton;
    private boolean isFirstWhite = true;
 
    ChessBoardWithColumnsAndRows() {
        initializeGui();
    }
 
    public final void initializeGui() {
        // set up the main GUI
        gui.setBorder(new EmptyBorder(5, 5, 5, 5));
        JToolBar tools = new JToolBar();
        tools.setFloatable(false);
        gui.add(tools, BorderLayout.PAGE_START);
        tools.add(new JButton("New")); // TODO - add functionality!
        tools.add(new JButton("Save")); // TODO - add functionality!
        tools.add(new JButton("Restore")); // TODO - add functionality!
        tools.addSeparator();
        resigButton = new JButton("Resign");
        tools.add(resigButton);
        resigButton.addActionListener(this);
        tools.addSeparator();
        tools.add(message);
 
        gui.add(new JLabel("?"), BorderLayout.LINE_START);
 
        chessBoard = new JPanel(new GridLayout(0, 9));
        chessBoard.setBorder(new LineBorder(Color.BLACK));
 
        initializeChessBoard();
        gui.add(chessBoard);
    }
 
    private void initializeChessBoard() {
        chessBoard.removeAll();
        Insets buttonMargin = new Insets(0, 0, 0, 0);
        for (int ii = 0; ii < chessBoardSquares.length; ii++) {
            for (int jj = 0; jj < chessBoardSquares[ii].length; jj++) {
                JButton b = new JButton();
                b.setMargin(buttonMargin);
                // our chess pieces are 64x64 px in size, so we'll
                // 'fill this in' using a transparent icon..
                ImageIcon icon = new ImageIcon(new BufferedImage(64, 64,
                        BufferedImage.TYPE_INT_ARGB));
                b.setIcon(icon);
                if ((jj % 2 == 1 && ii % 2 == 1)
                        || (jj % 2 == 0 && ii % 2 == 0)) {
                    if (isFirstWhite) {
                        b.setBackground(Color.WHITE);
                    } else {
                        b.setBackground(Color.BLACK);
                    }
                } else {
                    if (isFirstWhite) {
                        b.setBackground(Color.BLACK);
                    } else {
                        b.setBackground(Color.WHITE);
                    }
                }
                chessBoardSquares[jj][ii] = b;
            }
        }
 
        // fill the chess board
        chessBoard.add(new JLabel(""));
        // fill the top row
        for (int ii = 0; ii < 8; ii++) {
            chessBoard.add(new JLabel(COLS.substring(ii, ii + 1),
                    SwingConstants.CENTER));
        }
        // fill the black non-pawn piece row
        for (int ii = 0; ii < 8; ii++) {
            for (int jj = 0; jj < 8; jj++) {
                switch (jj) {
                case 0:
                    chessBoard.add(new JLabel("" + (ii + 1),
                            SwingConstants.CENTER));
                default:
                    chessBoard.add(chessBoardSquares[jj][ii]);
                }
            }
        }
        chessBoard.revalidate();
        chessBoard.repaint();
    }
 
    public final JComponent getChessBoard() {
        return chessBoard;
    }
 
    public final JComponent getGui() {
        return gui;
    }
 
    public static void main(String[] args) {
        Runnable r = new Runnable() {
 
            @Override
            public void run() {
                ChessBoardWithColumnsAndRows cb = new ChessBoardWithColumnsAndRows();
 
                JFrame f = new JFrame("ChessChamp");
                f.add(cb.getGui());
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f.setLocationByPlatform(true);
 
                // ensures the frame is the minimum size it needs to be
                // in order display the components within it
                f.pack();
                // ensures the minimum size is enforced.
                f.setMinimumSize(f.getSize());
                f.setVisible(true);
            }
        };
        SwingUtilities.invokeLater(r);
    }
 
    @Override
    public void actionPerformed(ActionEvent evnt) {
        Object source = evnt.getSource();
        if (source == resigButton) {
            isFirstWhite = !isFirstWhite;
            initializeChessBoard();
        }
    }
}
1
2 / 2 / 2
Регистрация: 14.10.2013
Сообщений: 49
13.01.2016, 13:10  [ТС] 5
Большое спасибо
0
13.01.2016, 13:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2016, 13:10
Помогаю со студенческими работами здесь

Шахматная доска
Есть шахматная доска (8*8). Нужно с помощью фигуры &quot;конь&quot; обойти все 64 клетки шахматной доски....

Шахматная доска
Поля шахматной доски характеризуются записью: Type Pole=record Ver:(a,b,c,d,e,f,g,h);...

Шахматная доска
Даны координаты двух различных полей шахматной доски x1,x2,y1,y2(Целые числа лежащие в диапазоне от...

Шахматная доска
Привет, хочу попросить вас помочь) Дано шахматную доску размерами NxN (N &lt;= 100) и координаты туры...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru