abcd423417984 Skrevet 9. mai 2006 Del Skrevet 9. mai 2006 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
HV Skrevet 9. mai 2006 Del Skrevet 9. mai 2006 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
HV Skrevet 9. mai 2006 Del Skrevet 9. mai 2006 (endret) 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 9. mai 2006 av HV Lenke til kommentar
abcd423417984 Skrevet 9. mai 2006 Forfatter Del Skrevet 9. mai 2006 Takk for svaret. Det siste du foreslo der vil vel endre for _alle_ JCheckBoxes? Jeg trenger det kun for noen få utvalgte. Lenke til kommentar
abcd423417984 Skrevet 9. mai 2006 Forfatter Del Skrevet 9. mai 2006 (endret) 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 9. mai 2006 av invictus Lenke til kommentar
HV Skrevet 9. mai 2006 Del Skrevet 9. mai 2006 (endret) 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 9. mai 2006 av HV Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå