当前位置: 首页 > 知识库问答 >
问题:

在之前更改背景色后禁用时,JTextField的背景色不会变为“灰色”

南宫云
2023-03-14

通常情况下,当您使用setEdable(false)setEnable(false)时,JTextField的背景/前景色会变成“灰色”。但是,如果之前使用setbackground(Color)设置了背景色(例如White),那么调用setEnablesetEdable将不再影响背景色。相反,它会被先前设置的颜色覆盖。

在WinForms(.NET)中,这可以通过将背景颜色“重置”为非覆盖默认值来解决,即color。空的。这将导致文本框恢复标准行为。然而,我还没有为JTextField找到类似的“默认值”。当JTextField被禁用或设置为只读时,如何将其还原为使用默认颜色并自动切换颜色?前景色也有类似的问题。

共有2个答案

赏育
2023-03-14

如何还原JTextField以使用默认颜色

textField.setBackground( null );

在禁用或设置为只读时自动切换颜色?

使用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();
            }
        });
    }
}
郑俊材
2023-03-14

您需要将字段的背景颜色重置为其默认值。

默认UI委托正在查找UIResources,以确定要用于给定字段的正确着色(基于已安装的外观)。

可以使用以下方法重置背景色:

JTextField#setBackground(UIManager.getColor(“TextField.background”))

或者,你可以为你的定制背景构建一个定制的UIResource

查看ColorUIResource了解更多详细信息。

 类似资料:
  • 问题内容: 我对背景色有疑问。如何在启用的文本字段中进行更改(编辑时)?仅适用于禁用的文本字段。可以更改窗口中所有文本字段的背景,但我只想对其中一个进行更改。 问题答案: 好的,这是我需要的:

  • 我需要帮助的java swing为GUI。我已经包含了“frame.getContentPane().setbackground(color.cyan);”到代码,但框架的背景颜色不变?谢谢你。

  • 我试图在基于swing的GUI中更改的背景。我已将该表添加到中。但是,表格中没有单元格的区域不会改变颜色。我尝试更改滚动窗格的背景色和前景色。然而,这也无济于事。我需要编辑JTable的哪个组件来更改白色背景。下面是我代码的一部分。 JTable的代码

  • 我添加了一个表,但问题是,面板没有显示其背景色。我试过设置滚动窗格的背景色等,但它不起作用。框架有一个按钮“验证”,单击该按钮时,在其下方显示一个表。在单击之前,表格将显示的部分为纯灰色。我希望整个部分是象牙背景。请帮我诊断这个问题。

  • 1. 前言 颜色可以使普通文字表达出更深刻的含义,比如红色用于醒目与警示、绿色用于表达良好与正常等。 Markdown 使普通文本具有格式,但它的原生语法并不支持修改前景色和背景色。为了实现丰富文本颜色的需求,我们需要通过增加 HTML 标签实现此类效果。 环境说明: 考虑到 Markdown 工具之间的不兼容,有的内容直接从页面复制粘贴到本地不会正常显示,大家学习时自己动手写是肯定没问题的。本节

  • 我制作了一个JTextField,我希望它的背景是红色的,当它没有字符时,一旦一个字符被写入,就会自动变为绿色。 我试过这个密码 但它不会自动更新它。 谢谢