我需要创建看起来像 JTextField 的组件(相同的边框、阴影、圆角等),但用于显示一些带有文本的图形。
是否可以为 JTextField 创建类似渲染器的东西?或者基于 JPanel 创建自定义组件,但如何强制它看起来与 JTextField 相同
另一个复杂情况是,应用程序将在不同的 LAF 上运行,动态更改。
你有什么想法 ?
我需要创建看起来像 JTextField 的组件(相同的边框、阴影、圆角等),但用于显示一些带有文本的图形。
是否可以为 JTextField 创建类似渲染器的东西?或者基于 JPanel 创建自定义组件,但如何强制它看起来与 JTextField 相同
另一个复杂情况是,应用程序将在不同的 LAF 上运行,动态更改。
你有什么想法 ?
使用JTextPane
orJEditorPane
可以处理样式文本(带有嵌入图标)。有关更多详细信息,请参阅如何使用编辑器窗格和文本窗格。
我需要创建在不同外观和感觉中看起来像 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();
}
});
}
}
不,Swing 不提供任何可以在其上构建的 DefaultTextFieldRenderer 或 TextFieldRendere 接口。你提到你喜欢 L&F 感知渲染;这已经是答案的一部分:您必须为每个 L&F 实现一个 UI 才能将图形呈现到 TextField 中 - 这对于选定的少数几个(比如说 Windows/Mac/Metal)来说可能是可行的,但对于用户的任何L&F 来说几乎没有可能想要使用(如果您让他们选择)。
让我猜猜,您需要在该字段中显示某种状态/验证图标。做下一个最好的事情,并将其显示为字段旁边的图标,而不是 TextField 本身。少了很多麻烦:)