Reputation: 19
I am trying to make a reversi GUI and I am trying to change the buttons colors with an if loop. However, when it runs over this code it doesn't change the color:
if(y.board[i][j - 1] == 2)
{
y.board[i][j] = 1;
butArray[i][j].setBackground(Color.yellow);
y.board[i][j - 1] = 1;
butArray[i][j - 1].setBackground(Color.yellow);
System.out.println("4");
}
This is my JButton
declaring part
for(l=0; l < butArray.length; l++)
{
for(y=0; y <butArray[l].length; y++)
{
butArray[l][y] = new JButton("Xg");
butArray[l][y].addActionListener(this);
butArray[l][y].setBackground(Color.white);;
butArray[l][y].setOpaque(true);
buttons.add(butArray[l][y]);
}
}
Here is my full main code
/*
* Jesse Richards
* CMSC 112
*/
import java.awt.Color;
import java.util.Scanner;
public class Reversi {
int playerturn;
int counter;
int[][] board = new int[8][8];
Scanner keyboard = new Scanner(System.in);
int playerOnePoints;
int playerTwoPoints;
//getting things set
public void setplayerturn(){
int i;
if (counter % 2 == 0){
playerturn = 1;
}
else{
playerturn = 2;
}
}
//setting arrays
public void setArrays(){
int i;
int j;
for(i = 0;i<8;i++){
for(j = 0;j<8;j++){
board[i][j] = 0;
}
}
}
//gets what player is going
public void printBoard(){
int i,j;
for(i = 0;i<8;i++){
for(j = 0;j<8;j++){
System.out.print(board[i][j]);
System.out.print(" ");
}
System.out.println("");
}
}
public void points(){
int i,j;
for(i = 0;i<8;i++){
for(j = 0;j<8;j++){
if(board[i][j] == 1){
playerOnePoints++;
}
else{
playerTwoPoints++;
}
}
}
}
}
and full main driver
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JMenuBar;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.Color;
public class ReversiDriver extends JFrame implements ActionListener {
private JPanel score;
private JPanel buttons;
JButton[][] butArray = new JButton[8][8];
public static void main(String[] args) {
ReversiDriver gui = new ReversiDriver();
gui.setVisible(true);
// TODO Auto-generated method stub
Reversi x = new Reversi();
int i;
x.setplayerturn();
x.setArrays();
// for(i = 0;i<64;i++){
//
//
// x.printBoard();
//
// x.counter++;
//
//
// System.out.println("");
// }
x.points();
System.out.println("Player one has " + x.playerOnePoints +" Points");
System.out.println("Player two has " + x.playerTwoPoints +" Points");
if(x.playerOnePoints>x.playerTwoPoints){
System.out.println("Player One Wins!");
} else {
System.out.println("Player Two Wins!");
}
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("BUG");
//importing methods
Reversi x = new Reversi();
int i;
int j;
int l,y;
// TODO Auto-generated method stub
//if-else
//e.getSource() --> return the name of button
for(l=0; l < butArray.length; l++){
for(y=0; y <butArray[l].length; y++){
if(e.getSource() == butArray[l][y]){
//button was clicked1
playerOneTurn(l,y);
}
}
}
//e.getactionCommand()
String but = e.getActionCommand();
}
public boolean playerOneTurn(int i, int j){
int x;
Reversi y = new Reversi();
y.board[3][3] = 1;
y.board[3][4] = 2;
y.board[4][3] = 2;
y.board[4][4] = 1;
if(y.board[i - 1][j] == 0){
y.board[i][j] = 1;
butArray[i][j].setBackground(Color.yellow);
y.board[i -1][j] = 1;
butArray[i - 1][j].setBackground(Color.yellow);
System.out.println("1");
}
if(y.board[i + 1][j] == 2){
y.board[i][j] = 1;
butArray[i][j].setBackground(Color.yellow);
y.board[i + 1][j] = 1;
butArray[i + 1][j].setBackground(Color.yellow);
System.out.println("2");
}
if(y.board[i][j + 1] == 2){
y.board[i][j] = 1;
butArray[i][j].setBackground(Color.yellow);
y.board[i][j + 1] = 1;
butArray[i][j + 1].setBackground(Color.yellow);
System.out.println("3");
}
if(y.board[i][j - 1] == 2){
y.board[i][j] = 1;
butArray[i][j].setBackground(Color.yellow);
y.board[i][j - 1] = 1;
butArray[i][j - 1].setBackground(Color.yellow);
System.out.println("4");
}
if(y.board[i][j - 1] == 2){
y.board[i][j] = 1;
butArray[i][j].setBackground(Color.yellow);
y.board[i][j - 1] = 1;
butArray[i][j - 1].setBackground(Color.yellow);
System.out.println("5");
}
System.out.println("JEse");
return false;
}
public ReversiDriver(){
super("Menu Demonstration");
setSize(400, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new GridLayout(2, 2));
score = new JPanel();
score.setBackground(Color.black);
add(score,BorderLayout.SOUTH);
buttons = new JPanel();
add(buttons, BorderLayout.NORTH);
int y;
int l;
//arrange buttons
for(l=0; l < butArray.length; l++){
for(y=0; y <butArray[l].length; y++){
butArray[l][y] = new JButton("Xg");
butArray[l][y].addActionListener(this);
butArray[l][y].setBackground(Color.white);;
butArray[l][y].setOpaque(true);
buttons.add(butArray[l][y]);
}
}
//set four start buttons
butArray[3][3].setBackground(Color.yellow);
butArray[3][4].setBackground(Color.blue);
butArray[4][3].setBackground(Color.blue);
butArray[4][4].setBackground(Color.yellow);
}
}
Upvotes: 1
Views: 193
Reputation: 3978
I do not know in what part of the execution flow you intend to change the background color of a button, but at first sight, you code looks correct.. because the method setBackground color do exactly what it states.
Are you trying to set the background in a callback of any kind of listener of a component (Using the Event Dispatch Thread) ? or you are setting in another thread?
Also be sure that the component isOpaque
property is set to true. (set thought public void setOpaque(boolean isOpaque)
mutator method). Sometimes this can be the problem.
Upvotes: 0
Reputation: 347184
You're creating multiple instances of Reversi
, Reversi x = new Reversi()
, which means that when you inspect the state of the game, it's always at its default state.
You seem to be confused over the difference of how a console (linear) and GUI based (event driven) program works.
Start by creating a single instance of your Reversi
as an instance field of your class. When some state change event occurs, use this instance to determine how the UI or model should be updated
Upvotes: 3