设置文本字段的已禁用背景颜色 [英] Set Text Field's Disabled Background Color

查看:144
本文介绍了设置文本字段的已禁用背景颜色的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个文本字段,我设置 seteditable(false) setEnabled(false)在这种情况下,它的背景颜色变成了某物,我不能改变它回来。



查看,应用程序的背景颜色和2个禁用的文本字段的背景颜色不同
问题:如何更改已禁用和不可编辑的文本字段的背景颜色。



t5 是正确的文本字段(在照片中)。我试过的: t5.setBackground(Color ....) t5.setBackground(UIManager.getColor(t5.background) ) t5.setBackground(null); 。我甚至阅读了 JTextField的背景颜色在背景颜色更改之前禁用之前不会变为灰色和 JTextField背景颜色启用/禁用,但无法找出一种方法来做我想要的。我使用Netbeans 8(Nimbus主题)。如果我将LaF设置为Windows,那么颜色是相同的,但是如何使颜色在Nimbus本身相同?

解决方案

非活动颜色(通常)由外观和感觉提供。例如,在Windows下,属性 TextField.inactiveBackground 可用于影响不可编辑的背景颜色...



  import java.awt.BorderLayout; 
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.plaf.ColorUIResource;

public class TestTextField {

public static void main(String [] args){
new TestTextField();
}

public TestTextField(){
EventQueue.invokeLater(new Runnable(){
@Override
public void run(){
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch(ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex){
}

UIManager。 put(TextField.inactiveBackground,new ColorUIResource(new Color(255,0,0)));

JTextField field = new JTextField(Hello,10);
field。 setEditable(false);

JFrame frame = new JFrame(Testing);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout ;
frame.add(field);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}

}



Nimbus只是喜欢困难...

  import java.awt.Color; 
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.Paint;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Path2D;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.Painter;
import javax.swing.SwingUtilities;
import javax.swing.UIDefaults;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.plaf.ColorUIResource;
import javax.swing.plaf.nimbus.AbstractRegionPainter;

public class TestTextField {

public static void main(String [] args){
new TestTextField();
}

public TestTextField(){
EventQueue.invokeLater(new Runnable(){
@Override
public void run(){
try {
// UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
UIManager.setLookAndFeel(com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel);
} catch(ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex){
}


JTextField field = new JTextField(Hello,10);
field.setEditable false);
field.setEnabled(false);
UIDefaults overrides = new UIDefaults();
overrides.put(TextField.background,new ColorUIResource(Color.RED));
overrides.put(TextField [Enabled] .backgroundPainter,new Painter< JTextField>(){

@Override
public void paint(Graphics2D g,JTextField field,int width ,int height){
g.setColor(Color.RED);
g.fill(new Rectangle(0,0,width,height));
}

});
overrides.put(TextField [Disabled] .backgroundPainter,new Painter< JTextField>(){

@Override
public void paint(Graphics2D g,JTextField field,int width,int height){
g.setColor(Color.GREEN);
Insets insets = field.getInsets();
g.fill(new Rectangle(
insets.left ,
insets.top,
width - (insets.left + insets.right),
height - (insets.top + insets.bottom)));
}

});
field.putClientProperty(Nimbus.Overrides,覆盖);
// field.putClientProperty(Nimbus.Overrides.InheritDefaults,false);

JFrame frame = new JFrame(Testing);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout());
frame.add(field);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}

我只显示两个值),您需要与其他人一起玩。

  TextField.background = DerivedColor(color = 255,255,255 parent = nimbusLightBackground offsets = 0.0,0.0,0.0,0 pColor = 255,255,255 
TextField.contentMargins = javax.swing.plaf.InsetsUIResource [top = 6,left = 6,bottom = 6,right = 6]
TextField.disabled = DerivedColor(color = 214,217,223 parent = control offsets = 0.0,0.0,0.0,0 pColor = 214,217,223
TextField.disabledText = DerivedColor(color = 142,143,145 parent = nimbusDisabledText offsets = 0.0,0.0,0.0,0 pColor = 142,143,145
TextField.focusInputMap = javax.swing.plaf.InputMapUIResource@6a4ba620
TextField.font = javax.swing.plaf.FontUIResource [family = SansSerif,name = sansserif,style = plain,size = 12]
TextField.foreground = DerivedColor(color = 0,0,0 parent = text offsets = 0.0,0.0,0.0,0 pColor = 0,0,0
TextFieldUI = javax.swing.plaf.synth.SynthLookAndFeel
TextField [Disabled] .backgroundPainter = javax.swing.plaf.nimbus.TextFieldPainter@c87b565
TextField [Disabled] .borderPainter = javax.swing.plaf.nimbus.TextFieldPainter@21960050
TextField [Disabled ] .textForeground = DerivedColor(color = 142,143,145 parent = nimbusDisabledText offsets = 0.0,0.0,0.0,0 pColor = 142,143,145
TextField [Enabled] .backgroundPainter = javax.swing.plaf.nimbus.TextFieldPainter@7eee9569
TextField [Enabled] .borderPainter = javax.swing.plaf.nimbus.TextFieldPainter@61936199
TextField [Focused] .borderPainter = javax.swing.plaf.nimbus.TextFieldPainter@12ecb5db
TextField [Selected] .backgroundPainter = javax.swing.plaf.nimbus.TextFieldPainter@72974691
TextField [Selected] .textForeground = DerivedColor(color = 255,255,255 parent = nimbusSelectedText offsets = 0.0,0.0,0.0,0 pColor = 255,255,255
field.putClientProperty(Nimbus.Overrides.InheritDefaults,false);

code>,那么你往往最终得到一个非常简单的字段(无边框等)。



这种方法只会影响一个组件...


I have a textfield which I set seteditable(false) and setEnabled(false) but the problem is that in this case the background color of it changes to something and I cannot change it back.

See, the background color of the app and the background color of the 2 disabled text fields are different Question: How to change the background color of a disabled and non-editable text field.

t5 is the right text field (in the photo). What I have tried: Putting t5.setBackground(Color....), t5.setBackground(UIManager.getColor("t5.background")), t5.setBackground( null ); at the end of the constructor. I have even read Background color of JTextField doesn't become 'grayed out' when disabled after the background color had been changed before and JTextField background color on enable/disable but could not figure out a way to do what I want. I am using Netbeans 8 (Nimbus Theme). If I set the LaF to Windows, then the colors are same but how to make the colors same in Nimbus itself?

解决方案

The "inactive" color is provided (generally) by the look and feel. For example, under Windows the property TextField.inactiveBackground can be used to effect the non-editable background color...

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.plaf.ColorUIResource;

public class TestTextField {

    public static void main(String[] args) {
        new TestTextField();
    }

    public TestTextField() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                UIManager.put("TextField.inactiveBackground", new ColorUIResource(new Color(255, 0, 0)));

                JTextField field = new JTextField("Hello", 10);
                field.setEditable(false);

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new FlowLayout());
                frame.add(field);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

}

Updated with Nimbus example

Nimbus just likes to be difficult...

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.Paint;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Path2D;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.Painter;
import javax.swing.SwingUtilities;
import javax.swing.UIDefaults;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.plaf.ColorUIResource;
import javax.swing.plaf.nimbus.AbstractRegionPainter;

public class TestTextField {

    public static void main(String[] args) {
        new TestTextField();
    }

    public TestTextField() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
//                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                    UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }


                JTextField field = new JTextField("Hello", 10);
                field.setEditable(false);
                field.setEnabled(false);
                UIDefaults overrides = new UIDefaults();
                overrides.put("TextField.background", new ColorUIResource(Color.RED));
                overrides.put("TextField[Enabled].backgroundPainter", new Painter<JTextField>() {

                    @Override
                    public void paint(Graphics2D g, JTextField field, int width, int height) {
                        g.setColor(Color.RED);
                        g.fill(new Rectangle(0, 0, width, height));
                    }

                });
                overrides.put("TextField[Disabled].backgroundPainter", new Painter<JTextField>() {

                    @Override
                    public void paint(Graphics2D g, JTextField field, int width, int height) {
                        g.setColor(Color.GREEN);
                        Insets insets = field.getInsets();
                        g.fill(new Rectangle(
                                insets.left, 
                                insets.top, 
                                width - (insets.left + insets.right), 
                                height - (insets.top + insets.bottom)));
                    }

                });
                field.putClientProperty("Nimbus.Overrides", overrides);
//                field.putClientProperty("Nimbus.Overrides.InheritDefaults",false);

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new FlowLayout());
                frame.add(field);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }
}

I've only shown two values (default and disabled), you'll need to play around with the others.

TextField.background = DerivedColor(color=255,255,255 parent=nimbusLightBackground offsets=0.0,0.0,0.0,0 pColor=255,255,255
TextField.contentMargins = javax.swing.plaf.InsetsUIResource[top=6,left=6,bottom=6,right=6]
TextField.disabled = DerivedColor(color=214,217,223 parent=control offsets=0.0,0.0,0.0,0 pColor=214,217,223
TextField.disabledText = DerivedColor(color=142,143,145 parent=nimbusDisabledText offsets=0.0,0.0,0.0,0 pColor=142,143,145
TextField.focusInputMap = javax.swing.plaf.InputMapUIResource@6a4ba620
TextField.font = javax.swing.plaf.FontUIResource[family=SansSerif,name=sansserif,style=plain,size=12]
TextField.foreground = DerivedColor(color=0,0,0 parent=text offsets=0.0,0.0,0.0,0 pColor=0,0,0
TextFieldUI = javax.swing.plaf.synth.SynthLookAndFeel
TextField[Disabled].backgroundPainter = javax.swing.plaf.nimbus.TextFieldPainter@c87b565
TextField[Disabled].borderPainter = javax.swing.plaf.nimbus.TextFieldPainter@21960050
TextField[Disabled].textForeground = DerivedColor(color=142,143,145 parent=nimbusDisabledText offsets=0.0,0.0,0.0,0 pColor=142,143,145
TextField[Enabled].backgroundPainter = javax.swing.plaf.nimbus.TextFieldPainter@7eee9569
TextField[Enabled].borderPainter = javax.swing.plaf.nimbus.TextFieldPainter@61936199
TextField[Focused].borderPainter = javax.swing.plaf.nimbus.TextFieldPainter@12ecb5db
TextField[Selected].backgroundPainter = javax.swing.plaf.nimbus.TextFieldPainter@72974691
TextField[Selected].textForeground = DerivedColor(color=255,255,255 parent=nimbusSelectedText offsets=0.0,0.0,0.0,0 pColor=255,255,255

Interestingly, if you use field.putClientProperty("Nimbus.Overrides.InheritDefaults",false);, then you tend to end up with a very simple field (no borders, etc).

This approach only effects a single component...

这篇关于设置文本字段的已禁用背景颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆