设置文本字段的已禁用背景颜色 [英] Set Text Field's Disabled Background Color
问题描述
我有一个文本字段,我设置 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屋!