Farbe von Buttons stimmt nicht

Rufus.Mueller

Bekanntes Mitglied
Ich habe eine Klasse CorsiBloecke (Subklasse von JPanel) und eine Klasse CorsiQuadrate (Subklasse von Button). CorsiBloecke ordnet einige Instanzen von CorsiQuadrate auf einem schwarzen Panel an. Wunderlicherweise werden die Buttons in WHITE angezeigt, obwohl ich sie eigens in BLUE umgefärbt habe.

Das andere Probmel ist das: Wenn die Buttons auf schwarzem Hintergrund und blau eingefärbt sind, haben sie trotzdem noch einen feinen weißen Rahmen. Kann man diesen beseitigen? Der zusätzliche weiße Rahmen der sich einblendet wenn man mit der Maus über die Buttons fährt, sollte möglichst erhalten bleiben.


Java:
import java.awt.Color;
	import java.awt.event.ActionListener;
	import java.awt.event.ActionEvent;
import java.sql.Array;
import java.util.ArrayList;

import javax.swing.*;

	
	
	public class CorsiBloecke extends JPanel {
		
		//Deklarationsteil
		CorsiQuadrat block1, block2, block3, block4, block5, block6, block7, block8, block9;
		ArrayList<Integer> eingabeSequenzVP;
		int i =0;

		//Konstruktor
		public CorsiBloecke() {	
	
			
			eingabeSequenzVP= new ArrayList<Integer>();
			
			//Panel erzeugen	
			this.setLayout(null);
			this.setBackground(Color.BLACK);
			this.setVisible(true);
			
			//Corsi-Bklöcke erzeugen	
			block1 = new CorsiQuadrat("1");
			block2 = new CorsiQuadrat("2");
			block3 = new CorsiQuadrat("3");
			block4 = new CorsiQuadrat("4");
			block5 = new CorsiQuadrat("5");
			block6 = new CorsiQuadrat("6");
			block7 = new CorsiQuadrat("7");
			block8 = new CorsiQuadrat("8");
			block9 = new CorsiQuadrat("9");  
		
			//Corsi-Blöcke dem Panel hinzufügen
			this.add(block1);
			this.add(block2);
			this.add(block3);
			this.add(block4);
			this.add(block5);
			this.add(block6);
			this.add(block7);
			this.add(block8);
			this.add(block9);  
				
			//Größe und Position der Corsi-Blöcke auf dem Panel bestimmen
			block1.setBounds(205,135,90,90);
			block2.setBounds(365,80,90,90);
			block3.setBounds(550,80,90,90);
			block4.setBounds(730,170,90,90);
			block5.setBounds(220,390,90,90);
			block6.setBounds(340,285,90,90);
			block7.setBounds(540,420,90,90);
			block8.setBounds(540,245,90,90);
			block9.setBounds(715,300,90,90);  

			//Action-Listener bei allen Blöcken registrieren. Bei einem Event schreiben diese 
			//in ein Array, welcher Button gedrückt wurde (das Array enthält am Ende die Sequenz
			//wie sie vom Teilnehmer eingegeben wurde
			block1.addActionListener(new ActionListener() {

				@Override
				public void actionPerformed(ActionEvent arg) {		
					eingabeSequenzVP.add(i,1);
					i++;

					
				};
			});
			
			block2.addActionListener(new ActionListener() {

				@Override
				public void actionPerformed(ActionEvent arg) {
				
					eingabeSequenzVP.add(i,2);
					
					i++;
				};
			});
			
			block3.addActionListener(new ActionListener() {
				
				

				@Override
				public void actionPerformed(ActionEvent arg) {
					eingabeSequenzVP.add(i,3);
					i++;
					
				};
			});
			
			block4.addActionListener(new ActionListener() {

				@Override
				public void actionPerformed(ActionEvent arg) {
					eingabeSequenzVP.add(i,4);
					i++;
					
				};
			});
			
			block5.addActionListener(new ActionListener() {

				@Override
				public void actionPerformed(ActionEvent arg) {
					eingabeSequenzVP.add(i,5);
					i++;
					
				};
			});
			
			block6.addActionListener(new ActionListener() {

				@Override
				public void actionPerformed(ActionEvent arg) {
					eingabeSequenzVP.add(i,6);
					i++;	
					
				};
			});
			
			block7.addActionListener(new ActionListener() {

				@Override
				public void actionPerformed(ActionEvent arg) {
					eingabeSequenzVP.add(i,7);
					i++;			
				};
			});
			
			block8.addActionListener(new ActionListener() {

				@Override
				public void actionPerformed(ActionEvent arg) {
				
					eingabeSequenzVP.add(i,8);
					i++;			
				};
			});
			
			block9.addActionListener(new ActionListener() {

				@Override
				public void actionPerformed(ActionEvent arg) {
					eingabeSequenzVP.add(i,9);
					i++;			
				};
			});
		}
		
		//gibt die Sequenz die die VP eingegeben hat zurück
		public ArrayList<Integer> gibEingabesequenzVP() {
			return eingabeSequenzVP;
		}
		
		//setzt die eingabeSequenzVP zurück;
		public void setzeZurueckEingabeSequenzVP(){
		
			eingabeSequenzVP= new ArrayList<Integer>();
			i=0;
				
			}
			
			
		}


Java:
import java.awt.Color;
import java.awt.event.MouseListener;

import javax.swing.JButton;


public class CorsiQuadrat extends JButton {
	
	public CorsiQuadrat(){
		this.setBackground(Color.BLUE);
	}

	//Quadrat gelb einfärben für eine Sekunde
	public void aufblinken() throws InterruptedException {
		this.setBackground(Color.YELLOW);
		Thread.sleep(1000);
		
			this.setBackground(Color.BLUE);
		Thread.sleep(1000);
		

	}


    private MouseListener[] listener = null;
    
    public CorsiQuadrat(String a){
    	super(a);
   //   this.setBackground(Color.BLUE);
		this.setText(a);
        
    }
    
    @Override
    public void setEnabled(boolean b) {
        if (b){
            setRolloverEnabled(true);
            setFocusable(true);
            if (listener != null){
                for (MouseListener ml : listener){
                    addMouseListener(ml);
                }
                listener = null;
            }
        }else{
            setRolloverEnabled(false);
            setFocusable(false);
            if (listener == null){
                listener = getMouseListeners();
                for (MouseListener ml : listener){
                    removeMouseListener(ml);
                }
            }
        }
    } 
}
 
Das geht mit
Code:
this.setBorder(null);
oder
Code:
this.setBorderPainted(true);

dabei geht leider der MouseOverEffekt verloren, den könnte man aber wiederum mit einem MouseListener und
Code:
mouseEntered(MouseEvent e)
und
Code:
mouseExited(MouseEvent e)
einbauen.

Grüße
 

Neue Themen


Zurück
Oben