Gå til innhold

bytte farge på JCheckBox når den er disabled


Anbefalte innlegg

Hei

 

Jeg lurer på hvordan jeg endrer tekstfarge på en JCheckBox som er disabled. Jeg antar det på en eller annen måte er mulig, men det ser ikke ut som det er intuitivt gjennom en enkel-metode.

 

Noen tanker om dette?

 

Ønsker altså at en JCheckBox fremdeles skal ha samme foreground farge etter den er satt til enabled=false.

Lenke til kommentar
Videoannonse
Annonse

Dette er en av mine løsninger, fungerer perfekt når det blir mange ting som skal endres. Kanskje litt volsomt hvis du kun skal endre enn liten ting.

 

import java.awt.*;
import java.io.Serializable;
import javax.swing.*;
import javax.swing.plaf.UIResource;

public class CheckBoxIcon implements UIResource, Icon, Serializable {
Image unchecked = null, checked = null;
int width = 13, height = 13;

public CheckBoxIcon() {
 unchecked = new ImageIcon(this.getClass().getResource( "images/CheckBoxNotSelected.PNG")).getImage();
 checked = new ImageIcon(this.getClass().getResource( "images/CheckBoxSelected.PNG")).getImage();
}

public int getIconWidth() {
 return width;
}

public int getIconHeight() {
 return height;
}

/*
 * c is the checkbox, g is the Graphics object from the paint method of the
 * CheckboxUI class x and y are where the icon is to be painted on the
 * Graphics object g
 */
public void paintIcon(Component c, Graphics g, int x, int y) {
 /*
  * This icon will be used with a JCheckBox so the assumption can be made
  * to cast it as an AbstractButton will provide state information of the
  * checkbox
  */
 ButtonModel model = ((AbstractButton) c).getModel();
 // This ant aliasing provides a nice blended into the background
 ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING,
   RenderingHints.VALUE_ANTIALIAS_ON);

 // Drawing the unchecked image by default at x and y
 g.drawImage(unchecked, x, y, width, height, null);

 // If the checkbox is checked then paint over the unchecked image with
 // the checked image
 if (model.isSelected() || model.isPressed() || model.isArmed())
 	g.drawImage(checked, x, y, width, height, null);
}
}

 

Så har vi LAF klassen din som må innholde dette:

public class LAF extends BasicLookAndFeel {

........

protected void initComponentDefaults(UIDefaults table) {
 super.initComponentDefaults(table);
  Vector list = new Vector();
  
  list.addElement("CheckBox.icon");
  list.addElement(new CheckBoxIcon());

//   list.addElement("ButtonUI");
//   list.addElement(new ButtonUI());
 
       Object results[] = new Object[list.size()];
       list.copyInto(results);
 table.putDefaults(results);

............
}
}

 

Håper dette hjelper.

Vennlig hilsen

Hv

Lenke til kommentar

Hvis kun skal bytte farge er dette sikker enda lettere:

Dette er et eksempel på en annen farge som er byttet:

    UIManager.put("Table.focusCellHighlightBorder",
     new BorderUIResource.LineBorderUIResource(
       new ColorUIResource(color)));
   UIManager.put("List.focusCellHighlightBorder",
     new BorderUIResource.LineBorderUIResource(
       new ColorUIResource(color)));

 

Du leter etter:

UIManager.put("CheckBox.ForegroundColor",new ColorUIResource(dinFarge);

Du må søke på google for å finne ut nøyaktig hva denne propertisen heter, denne var gjettet frem.("CheckBox.ForegroundColor").

 

Jeg vet bare at den starter med "CheckBox."

 

Vennlig hilsen

HV

Endret av HV
Lenke til kommentar

Jeg fant følgende side:

 

http://home.tiscali.nl/~bmc88/java/sbook/0...ml#togglebutton

 

Funker altså med følgende:

 

UIManager.put("CheckBox.disabledText", UIManager.get("CheckBox.foreground"));

 

MEN det må skje _før_ første gang jeg oppretter en JCheckBox. Jeg prøve å gjøre det "mellom" opprettelse av JCheckBoxes slik at kun noen få fikk endret fargen sin, men det gikk ikke.

Endret av invictus
Lenke til kommentar

Heisann

 

Nei UIManager vil bli generelt for alle.

 

Takk for linken til siden, veldig fin oversikt.

 

Det du må gjøre er å lage din egen klasse som extender JCheckBox. På den måten vil du få tilgang til metoden setForeground(Color color). Har laget et eksempel der du har 4 forskjellige farger på teksten.

 

Dette må være det du er ute etter da:

import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;

import javax.swing.JCheckBox;
import javax.swing.JFrame;

public class Check extends JFrame{
public Check(){
 Container c = getContentPane();
 c.setLayout(new GridLayout(1,4,5,5));

 c.add(new CustomCheckBox("Rød tekst",new Color(200,31,31)));
 c.add(new CustomCheckBox("Blå tekst",new Color(59,51,219)));
 c.add(new CustomCheckBox("Grønn tekst",new Color(51,219,59)));
 c.add(new CustomCheckBox("Gul tekst",new Color(220,231,40)));
 
 pack();
 setVisible(true);
 setLocationRelativeTo(null);
 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
}
public static void main(String[] args) {
 new Check();
}
private class CustomCheckBox extends JCheckBox{
 public CustomCheckBox(String text,Color color){
 	setText(text);
 	setForeground(color);
 }
}
}

 

Vennlig hilsen

HV

Endret av HV
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...