Ich habe vorhin angefangen ein kleines Mastermind zu programmieren. Bin gerade bei der GUI und habe mir dafür zwei Klassen (RoundButton und MatchButton). Nur komischerweiße übernehmen die die Farben voneinander, wenn man über sie fährt (ist ein bisschen blöd zu erklären, deswegen am besten compilieren, ausführen und ein bisschen wild im Felt rumfummeln)
Weiß jemand woran das liegt?
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Mastermind extends JFrame implements ActionListener {
JPanel pane = new JPanel();
JPanel left = new JPanel();
JPanel middle = new JPanel();
RoundButton[] sticks = new RoundButton[8];
RoundButton[] setted = new RoundButton[40];
MatchButton[] target = new MatchButton[setted.length / 4];
public Mastermind() {
pane.setLayout(new BorderLayout());
left.setPreferredSize(new Dimension(30, 160));
middle.setLayout(new GridLayout(0, 5, 3, 5));
for (int i = 0; i < 8; i++) {
sticks[i] = new RoundButton(i);
sticks[i].addActionListener(this);
left.add(sticks[i]);
}
for (int i = 0; i < setted.length + target.length; i++) {
if ((i + 1) % 5 == 0) {
target[(i + 1) / 5 - 1] = new MatchButton();
middle.add(target[(i + 1) / 5 - 1]);
System.out.println("add Target " + ((i + 1) / 5 - 1));
}
else {
setted[i - (i + 1) / 5] = new RoundButton(0);
setted[i - (i + 1) / 5].setActivated(false);
middle.add(setted[i - (i + 1) / 5]);
System.out.println("add Setted " + (i - (i + 1) / 5));
}
}
left.setBackground(new Color(200, 123, 134));
pane.add(left, BorderLayout.WEST);
pane.add(middle);
setContentPane(pane);
pack();
}
public static void main(String[] args) {
Mastermind game = new Mastermind();
game.setVisible(true);
}
public void actionPerformed(ActionEvent evt) {
Object source = evt.getSource();
for (int i = 0; i < sticks.length; i++) {
if (source == sticks[i]) {
sticks[i].setSelected(true);
}
else {
sticks[i].setSelected(false);
}
}
}
}
class RoundButton extends JButton {
final int BLAU = 0;
final int ROT = 1;
final int WEISS = 2;
final int GRUEN = 3;
final int SCHWARZ = 4;
final int GELB = 5;
final int ORANGE = 6;
final int PINK = 7;
int color = 0;
boolean select = false;
boolean activated = true;
Color[] colors = new Color[8];
public RoundButton(int i) {
setPreferredSize(new Dimension(24, 24));
color = i;
colors[0] = Color.blue;
colors[1] = Color.red;
colors[2] = Color.white;
colors[3] = Color.green;
colors[4] = Color.black;
colors[5] = Color.yellow;
colors[6] = Color.orange;
colors[7] = Color.pink;
}
public int getColor() {
return color;
}
public void setColor(int i) {
color = i;
repaint();
}
public boolean isSelected() {
return select;
}
public void setSelected(boolean i) {
select = i;
repaint();
}
public boolean isActivated() {
return activated;
}
public void setActivated(boolean i) {
activated = i;
repaint();
}
public void paintComponent(Graphics comp) {
if (activated == true) {
comp.setColor(colors[color]);
comp.fillRoundRect(2, 2, 20, 20, 20, 20);
if (select == true) {
comp.setColor(Color.black);
comp.drawRect(1, 1, 21, 21);
}
}
else {
comp.setColor(Color.white);
comp.drawRoundRect(2, 2, 20, 20, 20, 20);
}
}
}
class MatchButton extends JButton {
boolean pressed = false;
boolean activated = true;
int red = 1;
int white = 2;
public MatchButton() {
setPreferredSize(new Dimension(24, 24));
}
public void setPressed(boolean i) {
pressed = i;
repaint();
}
public boolean isPressed() {
return pressed;
}
public void setPoints(int i, int j) {
red = i;
white = j;
repaint();
}
public int[] getPoints() {
int[] i = new int[2];
i[0] = red;
i[1] = white;
return i;
}
public void paintComponent(Graphics comp) {
Graphics2D comp2D = (Graphics2D)comp;
if (pressed == false) {
comp2D.drawString("OK", 3, 17);
}
else {
for (int i = 0, pos = 1, height = 2; i < 4; i++, pos = pos + 11) {
if (i == 2) {
height = 14;
pos = 1;
}
if (red > 0) {
comp2D.setColor(Color.red);
comp2D.fillRoundRect(pos, height, 8, 8, 8, 8);
red--;
}
else if (white > 0) {
comp2D.setColor(Color.white);
comp2D.fillRoundRect(pos, height, 8, 8, 8, 8);
white--;
}
}
}
}
}
Weiß jemand woran das liegt?