【问题标题】:Prompt for JTextField makes it shade gray提示 JTextField 使其变为灰色
【发布时间】:2014-09-03 02:13:56
【问题描述】:

我正在用 JTextFields 玩 Prompt,

只有一个问题:

如您所见,背景有点灰色,我什至尝试将背景颜色设置为白色,但它仍然是灰色的。这是我当前设置提示的代码:

final JTextField aText = new JTextField(6);
final JTextField bText = new JTextField(6);  
PromptSupport.setPrompt("Digit", aText);

这是正确的吗?谢谢。

【问题讨论】:

  • 什么是PromptSupport
  • @HovercraftFullOfEels PromptSupport 是 SwingX 中可用的 API
  • 什么操作系统?什么JDK?什么外观和感觉?考虑提供一个runnable example 来证明您的问题。这将导致更少的混乱和更好的响应
  • @HovercraftFullOfEels 如果你真的感兴趣,你可以有一个 look at this question 来演示它......
  • @MadP,谢谢! swingx 已添加。

标签: java swing prompt swingx digit


【解决方案1】:

这似乎是PromptSupport 和 MaxOS X 之间的错误(或者至少那是我遇到问题的地方)

我尝试使用PromprtSupport.setBackground,但这似乎不起作用,所以我最终改用PromptSupport.setBackgroundPainter

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import org.jdesktop.swingx.painter.Painter;
import org.jdesktop.swingx.prompt.PromptSupport;

public class TestPrompt {

    public static void main(String[] args) {
        new TestPrompt();
    }

    public TestPrompt() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JTextField prompt = new JTextField(20);
                PromptSupport.setPrompt("Go ahead, make my day", prompt);
                PromptSupport.setFocusBehavior(PromptSupport.FocusBehavior.SHOW_PROMPT, prompt);
                PromptSupport.setBackgroundPainter(new Painter() {
                    @Override
                    public void paint(Graphics2D g, Object object, int width, int height) {
                        g.setColor(UIManager.getColor("TextField.background"));
                        g.fillRect(0, 0, width, height);
                    }
                }, prompt);

                prompt.setOpaque(true);
                JTextField noPrompt = new JTextField(20);

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new GridBagLayout());
                GridBagConstraints gbc = new GridBagConstraints();
                gbc.gridwidth = GridBagConstraints.REMAINDER;
                gbc.insets = new Insets(4, 4, 4, 4);
                frame.add(prompt, gbc);
                frame.add(noPrompt, gbc);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

}

这是一种变通方法,而不是解决方案,因为仍然存在一些问题...

【讨论】:

  • 适用于 Mac OS 10.9 和 Java 8。您使用的是什么?
  • 10.9.4,嗯...我没有复制粘贴。
  • 不可否认,我在虚拟机中运行 OSX,但它应该可以工作。我回家后测试一下
  • 非常感谢。有效。由于白色溢出,我不得不为矩形更改一点坐标。但休息一切都很好。
猜你喜欢
  • 2013-05-09
  • 2012-05-17
  • 2013-03-19
  • 2020-11-26
  • 2011-12-03
  • 1970-01-01
  • 2014-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多