extends JButton übernehmen Farben

Status
Nicht offen für weitere Antworten.

The_S

Top Contributor
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)

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?
 

mic_checker

Top Contributor
meinst du das wenn du z.B. mit dem blauen anfängst und nachher ne andere farbe auswählst, das in der ecke von den andern farben dann auch die blaue farbe auftaucht ? Ansonsten weiss ich gerad nicht was du meinst...
 

The_S

Top Contributor
Wenn man in dem Panel links über eine Farbe fährt und anschließend über irgendeinen Button im Feld die Maus zieht, ändert dieser die Farbe. Kommt man auf einen OK Button, so ändert dieser auch sein aussehen, zieht man jetzt die Maus nochmal durchs Feld stehen überall wo man drüberkommt OKs drauf.
 
B

Beni

Gast
Netter Fehler :bae:

Das Problem kommt daher, dass ein Button normalerweise jedes Pixel zeichnet, du aber paintComponent überschrieben hast, und das jetzt nicht mehr machst.
Was man hier sieht, sind Artifakte früherer paint-Aufrufe.

Es gibt zwei Varianten Abhilfe zu schaffen:
1. Du zeichnest auch den Hintergrund der Buttons (am einfachsten mit "Graphics#fillRect( 0, 0, getWidth(), getHeight() );", Farbe nicht vergessen!)
2. Du rufst für jeden Button "setOpaque( false )" auf, und sagst dem System damit, dass du nicht alles zeichnest. Ich würde diese Variante empfehlen, das sieht schöner aus :wink:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
ABstraCT ActionListener zufügen bei "extends JButton" AWT, Swing, JavaFX & SWT 7
volcanos Scrollen: JScrollPane mit Graphics g und Java-Fonts extends Frame ? AWT, Swing, JavaFX & SWT 5
P X extends TreeView - eigene Methoden AWT, Swing, JavaFX & SWT 5
S Swing Frame und Klasse extends JPanel - Komponenten zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 18
M extends JFrame, Applet (Mehrfachverwerbung?) AWT, Swing, JavaFX & SWT 8
A setLayout und extends Frame AWT, Swing, JavaFX & SWT 5
G Klasse XYComponent extends JComponent AWT, Swing, JavaFX & SWT 3
G JButton mit importFiles-Funktion auf JDrawPane AWT, Swing, JavaFX & SWT 5
B JButton Search AWT, Swing, JavaFX & SWT 8
B Swing JButton mit KeyListener AWT, Swing, JavaFX & SWT 3
L JButton durch Mausklick auslösen und Enter-Taste AWT, Swing, JavaFX & SWT 2
N Erlennen ob JButton gedrückt ist AWT, Swing, JavaFX & SWT 6
D JButton Form verändern AWT, Swing, JavaFX & SWT 4
R Grafik per JButton laden und austauschen lassen AWT, Swing, JavaFX & SWT 14
SvenPittelkow Programm soll auf JButton warten bis der geklickt wurde AWT, Swing, JavaFX & SWT 1
Badebay Problem mit JButton AWT, Swing, JavaFX & SWT 2
Z Swing Drag and Drop mit einem JButton AWT, Swing, JavaFX & SWT 1
Z Swing Kann man auf JButton zeichenen AWT, Swing, JavaFX & SWT 3
J JButton Icon hinzufügen AWT, Swing, JavaFX & SWT 5
U Swing JButton mit Icon AWT, Swing, JavaFX & SWT 7
ms_cikar Jbutton erzeugt neue Buttons AWT, Swing, JavaFX & SWT 2
Drachenbauer Swing Wie ändere ich die Farbe der Konturen von jButton und jCombobox? AWT, Swing, JavaFX & SWT 18
Drachenbauer Swing Wie ändere ich die helle geklickt-Farbe von einem JButton? AWT, Swing, JavaFX & SWT 4
A Swing JButton mit Pfeiltasten bewegen AWT, Swing, JavaFX & SWT 6
F Swing Scrollbare Liste von JButton AWT, Swing, JavaFX & SWT 4
Hatsi09 JButton text layout AWT, Swing, JavaFX & SWT 9
J JButton zum ändern Der Schriftart/Schriftgröße AWT, Swing, JavaFX & SWT 2
A Swing JButton aussehen AWT, Swing, JavaFX & SWT 12
J jButton soll nach klicken eine Variable um 1 erhöhen AWT, Swing, JavaFX & SWT 2
Legi Swing JButton Icon verschiebt sich AWT, Swing, JavaFX & SWT 2
T Swing Änderung des ActionListener Events nach Klick auf JButton AWT, Swing, JavaFX & SWT 2
S Swing JButton verschwindet nach Compilieren AWT, Swing, JavaFX & SWT 8
B Swing Posistion von JButton auslesen gibt immer 0 aus AWT, Swing, JavaFX & SWT 1
J Thread kennt JButton nicht. AWT, Swing, JavaFX & SWT 11
G Swing JButton ändert (unerwünscht) Größe bei Ausführung AWT, Swing, JavaFX & SWT 4
MR._FIRE_Flower Variable setzten mit JButton AWT, Swing, JavaFX & SWT 5
S Mit JButton neues Fester öffnen und das alte schließen AWT, Swing, JavaFX & SWT 3
T JButton wird beim vergrößern des Fensters erst sichtbar AWT, Swing, JavaFX & SWT 4
R Swing Verändern der Ausrichtung JButton und neu anzeigen AWT, Swing, JavaFX & SWT 2
G Swing JButton - Keine Klickanimation AWT, Swing, JavaFX & SWT 4
Joker4632 JButton nicht sichtbar, aber funktionsfähig AWT, Swing, JavaFX & SWT 8
B Swing JButton deaktivieren, wenn nicht alle JTextFields ausgefüllt sind. AWT, Swing, JavaFX & SWT 2
D JButton per Tastenkombi auswählen AWT, Swing, JavaFX & SWT 2
K JButton nicht sichtbar machen für User 2 AWT, Swing, JavaFX & SWT 4
L Swing JButton soll link öffnen AWT, Swing, JavaFX & SWT 1
K JButton auf anderer Klasse AWT, Swing, JavaFX & SWT 6
A JButton soll durch anklicken die Farbe wechseln AWT, Swing, JavaFX & SWT 8
T KeyListener funktioniert nicht wenn ich ein JButton hinzufüge AWT, Swing, JavaFX & SWT 1
R Swing ActionListener bei JButton AWT, Swing, JavaFX & SWT 9
B JButton -> Rahmen wegbekommen AWT, Swing, JavaFX & SWT 7
N JButton über benutzerdefinierte paintComponent setzen AWT, Swing, JavaFX & SWT 3
T JButton überlagern sich und werden erst beim Mausscrollen sichtbar AWT, Swing, JavaFX & SWT 2
B JButton erscheint in JFrame, obwohl er diesem nicht zugeordnet wurde! AWT, Swing, JavaFX & SWT 1
M JButton Probleme AWT, Swing, JavaFX & SWT 14
T Klasse über JButton schließen AWT, Swing, JavaFX & SWT 4
M Textfarbe JButton verändern AWT, Swing, JavaFX & SWT 2
N JButton ausblenden AWT, Swing, JavaFX & SWT 2
M Swing jButton Text verschwindet AWT, Swing, JavaFX & SWT 2
C Swing JButton wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
stylegangsta JLabel durch Klick auf JButton einblenden AWT, Swing, JavaFX & SWT 16
stylegangsta Eigene Klasse für JButton aus dem JFrame abrufen AWT, Swing, JavaFX & SWT 29
stylegangsta MouseEvents aus JButton aufrufen AWT, Swing, JavaFX & SWT 3
stylegangsta JButton Transparent anzeigen AWT, Swing, JavaFX & SWT 9
stylegangsta JButton Fehelr javax.swing.ImageIcon.<init>(Unknown Source) AWT, Swing, JavaFX & SWT 24
X Swing JButton's zum JScrollPane hinzufügen geht nicht. Bitte um Hilfe. AWT, Swing, JavaFX & SWT 9
D JButton - Nur Icon anzeigen / transparenter Hintergrund AWT, Swing, JavaFX & SWT 2
S JButton-Label vergrößern AWT, Swing, JavaFX & SWT 2
J Swing Basics - JButton funktioniert nicht. AWT, Swing, JavaFX & SWT 1
L JButton mit ImageIcon/Fehlermeldung AWT, Swing, JavaFX & SWT 1
D jButton Problem, ein Rieser Button bedeckt das ganze frame AWT, Swing, JavaFX & SWT 1
L Array mit JButton, wie rausfinden auf welche JButton geklickt wurde + index des JButtons ausgeben AWT, Swing, JavaFX & SWT 4
K (GUI) JButton Farbe bei druck ändern AWT, Swing, JavaFX & SWT 3
L JButton mit Image AWT, Swing, JavaFX & SWT 5
fLooojava JButton [Focus) AWT, Swing, JavaFX & SWT 4
M JButton - Listener AWT, Swing, JavaFX & SWT 1
D jButton auf von jFrame erzeugtem jDialog AWT, Swing, JavaFX & SWT 16
L JButton flackern - Programm hängt sich auf AWT, Swing, JavaFX & SWT 3
L JButton - Größe anders als erwartet AWT, Swing, JavaFX & SWT 2
1 JButton nach Klick ausblenden AWT, Swing, JavaFX & SWT 6
X Swing 1 JButton bedeckt meine ganze Frame aber Warum? AWT, Swing, JavaFX & SWT 2
S Größe und Farbe vom JButton festlegen AWT, Swing, JavaFX & SWT 2
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
J JButton neu zeichnen lassen AWT, Swing, JavaFX & SWT 9
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
HoloYoitsu Swing JButton in verschiedenen Winkeln drehen AWT, Swing, JavaFX & SWT 0
J vocab1 = new JButton(""+voc1.get(nr).toString()+""); AWT, Swing, JavaFX & SWT 16
A JButton wird bei ActionListener nicht "angenommen" AWT, Swing, JavaFX & SWT 7
BRoll JButton Text nicht ausblenden ("...") AWT, Swing, JavaFX & SWT 2
I JFrame mit JButton schließen? AWT, Swing, JavaFX & SWT 0
D JList&JButton erst nach Resize des JFRame sichtbar AWT, Swing, JavaFX & SWT 2
J Swing JFrame slideout, wenn JButton gedrückt wurde AWT, Swing, JavaFX & SWT 0
S Swing Rückmeldung für JButton AWT, Swing, JavaFX & SWT 4
R AWT JLabel oder JButton aktualisieren AWT, Swing, JavaFX & SWT 1
L JButton im Frame fest verankern AWT, Swing, JavaFX & SWT 0
M Swing Mix JComboBox - JButton? AWT, Swing, JavaFX & SWT 6
U Event Handling JButton Actionevent: starte Spiel AWT, Swing, JavaFX & SWT 4
E JButton füllt ganzes JPanel auf AWT, Swing, JavaFX & SWT 6
P Verbuggte custom JButton unter Windows AWT, Swing, JavaFX & SWT 9
W Swing JButton lässt sich nicht anzeigen AWT, Swing, JavaFX & SWT 8
Kandum Swing JButton - onclick -> Grafikfehler AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben