2013-02-28 2 views
2

Примечание: этот вопрос может немного похож на другой, который я опубликовал несколько недель назад. В то время я не работал с добавлением кнопок в виде массивов, вот что мешает мне на этот раз.Изменение цвета элементов GridLayout

Я работаю с шахматной доской, и я смог самостоятельно создать доску из 64 квадратов. Однако мне кажется слишком сложным управлять добавлением цветов в квадраты.

Мой код выглядит следующим образом:

Chess.java

import java.awt.GridLayout; 

import javax.swing.JButton; 
import javax.swing.JFrame; 

public class Chess implements config { 

public static void main(String[] args) { 

    int[] squareArray; 

    squareArray = new int[65]; 

    int i = 1; 

    JFrame frame = new JFrame("Chessboard"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setLayout(new GridLayout(ROWS, COLS, 2, 2)); 

    for (i = 1; i < 65; i++) { 
     squareArray[i] = i; 

     frame.add(new JButton("" + squareArray[i])); 
     } 

    frame.setSize(800, 800); 
    frame.setVisible(true); 
    } 
} 

Piece.java

import java.awt.Color; 
import javax.swing.JFrame; 

public class Piece extends JFrame implements config { 

public Piece (int n) { 

    setBackground(calcColor(n)); 
    } 

public void Pieces() { 
    new Pieces(); 
     //This class contains nothing at the moment. 
    } 

Color calcColor(int n) { 
    boolean everysecondSquare = (n % 2 == 0); 
    boolean everysecondRow = ((n/ROWS) % 2 == 0); 
    return (everysecondSquare != everysecondRow ? P1Color : P2Color); 

    } 

} 

config.java

import java.awt.Color; 


public interface config { 

public int ROWS = 8; 
public int COLS = 8; 

Color P1Color = (new Color(245,222,179)); 
Color P2Color = (new Color(244,164,96)); 

} 

Я прекрасно понимаю, что это, вероятно, очень плохо кодируется, поскольку я очень новичок в Java. Я был бы очень доволен и благодарен, если бы кто-то помог мне с цветами здесь, поскольку я застрял уже несколько дней, не получив дальнейших усилий. Я не ожидаю, что кто-то закончит код для меня, а просто поможет мне на пути туда добраться. :)

+0

Смотрите также этот пример [] (http://stackoverflow.com/a/2562685/230513) и [изменение] (http://stackoverflow.com/a/2563350/230513). – trashgod

ответ

5

Как насчет этого?

for (i = 1; i < 65; i++) { 
    squareArray[i] = i; 

    JButton b=new JButton("" + squareArray[i]); 
    b.setBackground(desiredColorHere); 
    frame.add(b); 
} 
+0

Может понадобиться 'setOpaque()' или [фоновая панель] (http://stackoverflow.com/a/3420431/230513). – trashgod

+0

Спасибо! Он отлично работает для добавления backgroundcolor для всей доски, но мне не удается использовать мой метод calcColor из config.java – Xantrax

+0

@Xantrax: Пожалуйста, изучите [Соглашения о присвоении имен Java] (http://www.oracle.com/technetwork/ java/javase/documentation/codeconvtoc-136057.html) и попытаться реализовать их при написании кода Java. Кроме того, поля, указанные в интерфейсах, всегда являются «общедоступными, статическими и окончательными», поэтому вы должны иметь доступ к полям 'config.java' в' Chess.java', просто записывая 'config.P1Color/config.P2Color' –

Смежные вопросы