Farbe von disableden CheckBox ändern

xanadoo

Erfahrenes Mitglied
Hallo zusammen

Ich habe eine disablede CheckBox, welche ich nicht wie üblich grau, sondern schwarz darstellen möchte.
Sie sollte sich optisch also nicht von einer enableden CheckBox unterscheiden.

JTextFields oder JLables haben ja die Methode "setDisabledTextColor(...)".
Gibt es so was nicht auch für CheckBoxen?
Oder weiss jemand wie man dies sonst noch bewerkstelligen könnte?

Gruss Xanadoo
 
Hilft Dir das

Java:
package de.tutorials;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Testing extends JFrame
{
  JCheckBox cbx = new JCheckBox("<html>Hello World</html>");
  JToggleButton btn = new JToggleButton("Disable/Enable");
  public Testing()
  {
    setLocation(400,300);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    getContentPane().add(cbx,BorderLayout.NORTH);
    getContentPane().add(btn,BorderLayout.SOUTH);
    pack();
    btn.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent ae){
        cbx.setEnabled(!btn.isSelected());}});
  }
  public static void main(String[] args){new Testing().setVisible(true);}
}
 
Nee, eigentlich nicht wirklich.
Denn in deinem Beispiel ist die CheckBox doch auch grau wenn man sie disabled.


Trotzdem danke.
 
Also ich weiss auch nicht weiter. Ich kann die Vordergrundfarbe und die Hintergrundfarbe ändert. Ich habe sogar Tom's Tipp mit Javacss ausprobiert. Der Haken bleibt grau.

Wenn Du eine Lösung findest, wäre ich echt neugierig....
 
Es hat mir keine Ruhe gelassen. Ich habe eine (leider unschöne) Lösung für das Windows lookandfeel im Web gefunden gefunden, angepasst und eingebaut.

Aber viellicht hilft es Dir weiter... Ich bleibe auch dran

Achtung geht nur bei Windows LookAndFeel

Java:
package de.tutorials;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileReader;

import javax.swing.ButtonModel;
import javax.swing.Icon;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JToggleButton;
import javax.swing.UIManager;

import com.sun.stylesheet.Stylesheet;
import com.sun.stylesheet.css.CSSParser;
public class Testing extends JFrame
{
  
  JToggleButton btn = new JToggleButton("Disable/Enable");
  JCheckBox cbx = new JCheckBox(new Icon(){
	  
	
	        final static int csize = 13; 

	        public void paintIcon(Component c, Graphics g, int x, int y) { 
	            JCheckBox cb = (JCheckBox) c; 
	            ButtonModel model = cb.getModel(); 

	            // outer bevel 
	            if (!cb.isBorderPaintedFlat()) { 
	                // Outer top/left 
	                g.setColor(UIManager.getColor("CheckBox.shadow")); 
	                g.drawLine(x, y, x + 11, y); 
	                g.drawLine(x, y + 1, x, y + 11); 

	                // Outer bottom/right 
	                g.setColor(UIManager.getColor("CheckBox.highlight")); 
	                g.drawLine(x + 12, y, x + 12, y + 12); 
	                g.drawLine(x, y + 12, x + 11, y + 12); 

	                // Inner top.left 
	                g.setColor(UIManager.getColor("CheckBox.darkShadow")); 
	                g.drawLine(x + 1, y + 1, x + 10, y + 1); 
	                g.drawLine(x + 1, y + 2, x + 1, y + 10); 

	                // Inner bottom/right 
	                g.setColor(UIManager.getColor("CheckBox.light")); 
	                g.drawLine(x + 1, y + 11, x + 11, y + 11); 
	                g.drawLine(x + 11, y + 1, x + 11, y + 10); 

	                // inside box 
	                if ((model.isPressed() && model.isArmed()) 
	                        || !model.isEnabled()) { 
	                    g.setColor(UIManager.getColor("CheckBox.background")); 
	                } else { 
	                    g.setColor(UIManager 
	                            .getColor("CheckBox.interiorBackground")); 
	                } 
	                g.fillRect(x + 2, y + 2, csize - 4, csize - 4); 
	            } else { 
	                g.setColor(UIManager.getColor("CheckBox.shadow")); 
	                g.drawRect(x + 1, y + 1, csize - 3, csize - 3); 

	                if ((model.isPressed() && model.isArmed()) 
	                        || !model.isEnabled()) { 
	                    g.setColor(UIManager.getColor("CheckBox.background")); 
	                } else { 
	                    g.setColor(UIManager 
	                            .getColor("CheckBox.interiorBackground")); 
	                } 
	                g.fillRect(x + 2, y + 2, csize - 4, csize - 4); 
	            } 


	            if (model.isEnabled()) { 
	                g.setColor(UIManager.getColor("CheckBox.darkShadow")); 
	            } else { 
	                g.setColor(UIManager.getColor("CheckBox.shadow")); 
	            } 

	         
	            // paint check 
	            if (model.isSelected()) { 
	            	/* ######################################################
	            	 * 
	            	 * Hier die Farbe hart setzen
	            	 * 
	            	 * ######################################################
	            	 */
		            g.setColor(Color.BLACK);
		            
	                g.drawLine(x + 9, y + 3, x + 9, y + 3); 
	                g.drawLine(x + 8, y + 4, x + 9, y + 4); 
	                g.drawLine(x + 7, y + 5, x + 9, y + 5); 
	                g.drawLine(x + 6, y + 6, x + 8, y + 6); 
	                g.drawLine(x + 3, y + 7, x + 7, y + 7); 
	                g.drawLine(x + 4, y + 8, x + 6, y + 8); 
	                g.drawLine(x + 5, y + 9, x + 5, y + 9); 
	                g.drawLine(x + 3, y + 5, x + 3, y + 5); 
	                g.drawLine(x + 3, y + 6, x + 4, y + 6); 
	            } 

	        } 

	        public int getIconWidth() { 
	            return csize; 
	        } 

	        public int getIconHeight() { 
	            return csize; 
	        } 
	  }
);
  public Testing() throws Exception
  {
	cbx.setLabel("<html>Hallo</html>");  
    setLocation(400,300);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    getContentPane().add(cbx,BorderLayout.NORTH);
    getContentPane().add(btn,BorderLayout.SOUTH);
    
    // JavaCSS gescheitert!
    /*FileReader in = new FileReader("checkbox.css");
    Stylesheet stylesheet = CSSParser.parse(in);;
    in.close();
    stylesheet.applyTo(this);
    */
    
    pack();
    btn.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent ae){
        cbx.setEnabled(!btn.isSelected());}});
  }
  public static void main(String[] args) throws Exception{
	  UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
	  new Testing().setVisible(true);
  }
}
 
Vielen Dank für diesen Tipp.
Sieht eigentlich ziemlich genau so aus wie ich es mir vorgestellt hätte.

Leider muss es am Schluss auch auf Mac und Linux richtig funktionieren.
Aber ich denke darauf kann ich aufbauen.
 
Zurück