我需要创建看起来像JTextField的组件(相同的边框,阴影,圆角等),但用于显示带文本的图形。
是否可以为JTextField创建类似渲染器的内容? 要么 基于JPanel创建自定义组件,但如何强制它看起来与JTextField
相同另一个复杂因素是应用程序将在不同的LAF上运行。
你有什么想法吗?
答案 0 :(得分:8)
使用可以处理样式文本的JTextPane
或JEditorPane
(带有嵌入图标)。有关详细信息,请参阅How to Use Editor Panes and Text Panes。
我需要创建在不同的外观和感觉中看起来像JTextField的自定义组件,使用JTextPane或JEditorPane将更改边框着色和组件。
真的?下一个屏幕截图显示了所有3.哪个是哪个?
(通过查看第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本身中。麻烦少得多:)