我有一个JTextField,它的东侧有一个JButton。此时,当插入的字符到达按钮时,文本重叠的部分会插入到按钮下面。
这里有一个片段来重现这个问题
class TextFieldWithIconLauncher {
public static void main(String[] args) {
JTextField modelFileTField = new JTextField();
modelFileTField.setLayout(new BorderLayout());
JButton button = new JButton("click");
button.addActionListener(listener -> System.err.println("clicked!"));
modelFileTField.add(button, BorderLayout.EAST);
JFrame frame = new JFrame();
frame.setSize(200, 100);
frame.add(modelFileTField);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setMinimumSize(new Dimension(200, 100));
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}相反,这些是真实情况的截图。


我想避免文本与按钮重叠,而不限制用户可以插入的字符数。
PS:如果我将JTextField和JButton添加到JPanel中,它就像一个魅力,但我有一些限制,不幸的是,目前这种方法是不可行的。
发布于 2022-10-21 15:02:06
我解决了使用FlatLaf外观和感觉(https://www.formdev.com/flatlaf/)。这样,在JTextField文本和图标上设置特定属性不再重叠。具体而言,我做到了:
class TextFieldWithIconLauncher {
public static void main(String[] args) {
JTextField textField = new JTextField();
textField.setLayout(new BorderLayout());
JButton button = new JButton("click");
button.addActionListener(listener -> System.err.println("clicked!"));
textField.add(button, BorderLayout.EAST);
//Property to set
textField.putClientProperty(FlatClientProperties.TEXT_FIELD_TRAILING_COMPONENT, button);
JFrame frame = new JFrame();
frame.setSize(200, 100);
frame.add(modelFileTField);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setMinimumSize(new Dimension(200, 100));
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}https://stackoverflow.com/questions/74039531
复制相似问题