JTextField 不可直接编辑

问题描述 投票:0回答:1

我想要一个不可直接编辑的

J(Formatted)TextField
(无法输入或删除字符)。

也就是说,它是可以间接编辑的(我不会说如何编辑,但重点是我会在特定的事件序列之后以编程方式设置它的值)。如果我将字段的

editable
属性设置为
false
,其 L&F 会将背景绘制为灰色,这强烈暗示它根本不可编辑。我想避免这种情况。

回顾一下,该字段不应该是可编辑的,没有插入符号,但它仍然应该有白色背景。从技术上讲,我可以在 L&F 扩展上添加

intanceof
,但这显然不是我想要做的。丑陋的听众吞下了按键输入——再次,这感觉就像是一个拼凑。

您建议我如何实现这一目标?

Java 8、Swing。

java swing
1个回答
0
投票

这是一个使用 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);

  }

}

这可以将禁用的文本设置为非灰色。

© www.soinside.com 2019 - 2024. All rights reserved.