设置文本字段的禁用背景颜色

我有一个文本字段,我设置seteditable(false)setEnabled(false)但问题是,在这种情况下,它的背景颜色变为某些东西,我无法将其更改回来。 在此处输入图像描述

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

t5是右侧文本字段(在照片中)。 我尝试过:放置t5.setBackground(Color....)t5.setBackground(UIManager.getColor("t5.background"))t5.setBackground( null ); 在构造函数的末尾。 我甚至读过JTextField的背景颜色在之前更改了背景颜色并且启用/禁用JTextField背景颜色 后禁用时不会变成“灰显”但是无法找到实现我想要的方法。 我正在使用Netbeans 8(Nimbus Theme)。 如果我将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示例

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() { @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() { @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); } }); } } 

我只显示了两个值(默认值和禁用值),您需要与其他值一起玩。

 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); 那么你往往会得到一个非常简单的领域(没有边界等)。

这种方法只影响一个组件……