0

我需要创建看起来像 JTextField 的组件(相同的边框、阴影、圆角等),但用于显示一些带有文本的图形。

是否可以为 JTextField 创建类似渲染器的东西?或者基于 JPanel 创建自定义组件,但如何强制它看起来与 JTextField 相同

另一个复杂情况是,应用程序将在不同的 LAF 上运行,动态更改。

你有什么想法 ?

4

2 回答 2

8

使用JTextPaneorJEditorPane可以处理样式文本(带有嵌入图标)。有关更多详细信息,请参阅如何使用编辑器窗格和文本窗格

富文本文档中的嵌入图像


更新

我需要创建在不同外观和感觉中看起来像 JTextField 的自定义组件,使用 JTextPane 或 JEditorPane 将更改边框阴影和组件。

真的吗?下一个屏幕截图显示了所有 3 个。哪个是哪个?

区分这些

(通过查看代码 1st 没有作弊。)

至于解放军。给我看一个PLAF,其中它们之间有任何明显的区别。

import java.awt.*;
import javax.swing.*;

class DistinguishThese {

    public void initGui() {
        JPanel gui = new JPanel(new GridLayout(3,0,2,2));

        gui.add(new JTextField(5));
        gui.add(new JScrollPane(new JEditorPane()));
        gui.add(new JScrollPane(new JTextPane()));

        JOptionPane.showMessageDialog(null, gui);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater( new Runnable() {
            public void run() {
                DistinguishThese dt = new DistinguishThese();
                dt.initGui();
            }
        });
    }
}
于 2012-01-17T14:34:05.000 回答
3

不,Swing 不提供任何可以在其上构建的 DefaultTextFieldRenderer 或 TextFieldRendere 接口。你提到你喜欢 L&F 感知渲染;这已经是答案的一部分:您必须为每个 L&F 实现一个 UI 才能将图形呈现到 TextField 中 - 这对于选定的少数几个(比如说 Windows/Mac/Metal)来说可能是可行的,但对于用户的任何L&F 来说几乎没有可能想要使用(如果您让他们选择)。

让我猜猜,您需要在该字段中显示某种状态/验证图标。做下一个最好的事情,并将其显示为字段旁边的图标,而不是 TextField 本身。少了很多麻烦:)

于 2012-01-17T14:49:23.237 回答