我想要一个不可直接编辑的
J(Formatted)TextField
(无法输入或删除字符)。
也就是说,它是可以间接编辑的(我不会说如何编辑,但重点是我会在特定的事件序列之后以编程方式设置它的值)。如果我将字段的
editable
属性设置为 false
,其 L&F 会将背景绘制为灰色,这强烈暗示它根本不可编辑。我想避免这种情况。
回顾一下,该字段不应该是可编辑的,没有插入符号,但它仍然应该有白色背景。从技术上讲,我可以在 L&F 扩展上添加
intanceof
,但这显然不是我想要做的。丑陋的听众吞下了按键输入——再次,这感觉就像是一个拼凑。
您建议我如何实现这一目标?
Java 8、Swing。
这是一个使用 UIManager 的示例,问题是我的默认外观和感觉不使用禁用的背景颜色,也许你的使用了。
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.*;
import javax.swing.plaf.*;
public class DisabledWhiteTextField{
public static void main(String[] args){
UIManager.put("TextField.inactiveForeground", new ColorUIResource(Color.BLUE));
UIManager.put("TextField.inactiveBackground", new ColorUIResource(Color.RED));
UIManager.put("TextField.WHITE", new ColorUIResource(Color.YELLOW));
//To show the current values and what can be changed.
UIManager.getLookAndFeelDefaults().forEach( (k, v) ->{
System.out.println(k + ", " + v );});
JFrame frame = new JFrame("text");
JTextField field = new JTextField(40);
field.setEnabled(false);
field.setText("what");
frame.add(new JLabel("below"), BorderLayout.NORTH);
frame.add(field, BorderLayout.CENTER);
frame.add(new JTextField(40), BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
这可以将禁用的文本设置为非灰色。