【问题标题】:Set the text color in a Java textbox在 Java 文本框中设置文本颜色
【发布时间】:2010-10-28 08:57:24
【问题描述】:

如何在运行时设置 Java Swing 文本框中的文本颜色?在启动时,颜色是灰色的,当用户进入文本框时,我希望将颜色更改为正常的文本颜色。我目前正在使用以下代码:

private void txtScheduleInfoFocusGained(java.awt.event.FocusEvent evt)                                            
    {                                                
        try
        {
            if (currentClassIsNewClass() && txtScheduleInfo.getDocument().getText(0, txtScheduleInfo.getDocument().getLength()).equals(PASTE_SI_HERE))
            {
                txtScheduleInfo.setText("");
                txtScheduleInfo.setForeground(java.awt.SystemColor.textText);
            }
        }
        catch (BadLocationException ex)
        {
            JOptionPane.showMessageDialog(this, "BLE\nContact Zian", "Unexpected Problem", JOptionPane.ERROR_MESSAGE);
        }
    }  

此时代码运行时,文本仍然显示为灰色。

附加代码:
声明(作为字段):

   private javax.swing.JTextPane txtScheduleInfo;

实例化:

txtScheduleInfo = new javax.swing.JTextPane();

初始化:

txtScheduleInfo.setForeground(java.awt.SystemColor.textInactiveText);
txtScheduleInfo.setText("Paste schedule information here");
txtScheduleInfo.addFocusListener(new java.awt.event.FocusAdapter() {
    public void focusGained(java.awt.event.FocusEvent evt) {
        txtScheduleInfoFocusGained(evt);
    }
    public void focusLost(java.awt.event.FocusEvent evt) {
        txtScheduleInfoFocusLost(evt);
    }
});

【问题讨论】:

  • 你能发布一个更完整的例子吗?
  • 您是否在运行时使用调试器检查过您的条件是否为真?
  • 是的,我做到了。

标签: java swing textbox colors


【解决方案1】:

您确定 JTextBox 已启用吗?您可以致电setEnabled(true) 进行确认。不要试图粗鲁,这只是最可能的原因(Swing 中有代码强制禁用的组件变灰)。

如果这不能解决问题,您还可以通过调用 txtScheduleInfo.repaint() 来触发重绘,这可能会导致重绘。

如果这些都没有帮助,您可以发布一些代码,以便我们了解发生了什么。

【讨论】:

  • 不幸的是,这些解决方案都没有解决问题。我已经发布了额外的代码。
【解决方案2】:

试试这个

private void txtScheduleInfoFocusGained(java.awt.event.FocusEvent evt)                                            
    {                                                
        try
        {
            if (currentClassIsNewClass() && txtScheduleInfo.getDocument().getText(0, txtScheduleInfo.getDocument().getLength()).equals(PASTE_SI_HERE))
            {
                txtScheduleInfo.setForeground(java.awt.SystemColor.textText);
                txtScheduleInfo.setText("");
            }
        }
        catch (BadLocationException ex)
        {
            JOptionPane.showMessageDialog(this, "BLE\nContact Zian", "Unexpected Problem", JOptionPane.ERROR_MESSAGE);
        }
    }

(唯一的变化是交换顺序。现在您在清除文本之前设置前景色。)

【讨论】:

    【解决方案3】:

    Swing 通常不会执行此行为(当文本框获得编辑焦点时更改颜色)?尝试禁用所有颜色更改代码,看看它是否正常工作。 如果您愿意将您的代码以可编译的形式发布到PasteBin,其他人实际上也可以进行全面调试。

    我可以提出的其他建议:

    • 检查 java.awt.SystemColor.textText 是否真的是您想要的颜色(使用其上的方法获取十六进制颜色,然后将其显示在颜色选择器中)
    • 删除txtScheduleInfo.setForeground(java.awt.SystemColor.textInactiveText); 行,因为如果您的焦点处理程序损坏,它可能会以某种方式覆盖默认绘画。
    • 替换
      if (currentClassIsNewClass() && txtScheduleInfo.getDocument().getText(0, txtScheduleInfo.getDocument().getLength()).equals(PASTE_SI_HERE))
      if(true)

    由于 if 语句中的条件,您的焦点事件侦听器可能永远不会触发更改颜色。此外,您知道在调用该方法时无论如何都会获得焦点。

    【讨论】:

      猜你喜欢
      • 2011-09-27
      • 2012-02-24
      • 2022-01-22
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 2019-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多