JTextField上的自定义渲染器。可能吗 ?

时间:2012-01-17 14:28:34

标签: java swing jtextfield renderer

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

是否可以为JTextField创建类似渲染器的内容? 要么 基于JPanel创建自定义组件,但如何强制它看起来与JTextField

相同

另一个复杂因素是应用程序将在不同的LAF上运行。

你有什么想法吗?

2 个答案:

答案 0 :(得分:8)

使用可以处理样式文本的JTextPaneJEditorPane(带有嵌入图标)。有关详细信息,请参阅How to Use Editor Panes and Text Panes

Embedded images in rich text documents


更新

  

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

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

Distinguish These

(通过查看第1段代码不作弊。)

关于PLAF。给我看一个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();
            }
        });
    }
}

答案 1 :(得分:3)

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

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