dia*_*ler 3 java swing background jtextfield
通常,当您使用setEditable(false)或时setEnabled(false),JTextField的背景/前景色变为"变灰".但是,如果之前使用setBackground(color)(例如white)设置了背景颜色,则调用setEnabled或setEditable不会再影响背景颜色.相反,它被先前设置的颜色覆盖.
在WinForms(.NET)中,这可以通过将背景颜色"重置"为非重写默认值来解决,即Color.Empty.这将导致文本框重新获得标准行为.但是,我没有找到类似JTextField的"默认值".如何恢复JTextField以使用默认颜色并在禁用或设置为只读时自动切换颜色?前景色有类似的问题.
您需要将字段的背景颜色重置为其默认值.
默认UI委托正在查找a UIResource以确定要用于给定字段的正确阴影(基于已安装的外观).
您可以使用以下方法重置背景颜色:
JTextField#setBackground(UIManager.getColor("TextField.background"))
或者,您可以UIResource为自定义背景构建自定义.
请查看ColorUIResource更多详细信息.
如何还原JTextField以使用默认颜色
textField.setBackground( null );
Run Code Online (Sandbox Code Playgroud)
在禁用或设置为只读时自动切换颜色?
使用PropertyChangeListener:
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.text.*;
public class SSCCE extends JPanel implements PropertyChangeListener
{
public SSCCE()
{
JTextField textField = new JTextField("Some Text");
// Uncomment and run again to see the difference
//textField.addPropertyChangeListener( this );
textField.setBackground(Color.RED);
textField.setEditable(false);
add(textField);
}
public void propertyChange(PropertyChangeEvent e)
{
System.out.println(e.getPropertyName());
JTextField textField = (JTextField)e.getSource();
if ("editable".equals(e.getPropertyName()))
textField.setBackground( null );
}
private static void createAndShowUI()
{
JFrame frame = new JFrame("SSCCE");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add( new SSCCE() );
frame.pack();
frame.setLocationByPlatform( true );
frame.setVisible( true );
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowUI();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12409 次 |
| 最近记录: |