我想在JTextField中有一个JButton(带有一个文件夹图标图像),就像在JTextField的最右边那样,所以当点击时,该按钮会打开一个JFileChooser,当选择一个文件时,文件的路径出现在JTextField中。
我已经制作了这段代码,但没有出现任何内容。
public class TextFieldChooser extends JTextField {
public ImageIcon folderIcon;
public JButton btnFolder;
public TextFieldChooser(int columns) {
super(columns);
btnFolder = new JButton();
folderIcon = new ImageIcon(getClass().getResource("/resources/folder_find.png"));
btnFolder.setIcon(folderIcon);
this.add(btnFolder);
}
}
答案 0 :(得分:6)
您可能会发现Component Border有帮助。它允许您使用Border API在文本字段中显示按钮。
答案 1 :(得分:5)
基于Shakedown的建议,我认为你可以相对容易地获得所需的效果。你所做的是JPanel
包含文本区域和旁边的按钮。接下来,将文本字段设置为不绘制任何边框,并为JPanel
提供斜角边框。现在它看起来像按钮在文本区域内。它可能需要一些微调,但它应该有效。
答案 2 :(得分:4)
你不能 不希望在文本字段中放置一个按钮。事实上,您需要将您的意图分解为几个组件 - 3。
首先,你需要一个父容器,或者包含你的文本字段和按钮的东西; JPanel
就足够了。
然后你需要你的真实组件,而真实的我指的是那些真正做某事的人。这些是您的JTextField
和JButton
- 继续将这些内容添加到JPanel
。为了添加它们并让它们显示您想要的效果(使用角落中的按钮),您需要为JPanel
指定布局。此布局将定义添加的组件在JPanel
内(视觉上)的位置。
现在您已将这些内容添加到JPanel
中,您只能使用JPanel
,而不是根据所包含的JTextField
和JButton
进行思考。
答案 3 :(得分:2)
因为Pyrite没有发布他的最终解决方案,所以这是我的:
my_button = new JButton("x");
JFormattedTextField my_textfield = new JFormattedTextField("Nr.");
my_textfield.setBorder(javax.swing.BorderFactory.createEmptyBorder());
JPanel textfield_with_button = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0));
Border lowered_bevelborder = BorderFactory.createLoweredBevelBorder();
textfield_with_border.setBorder(lowered_bevelborder);
textfield_with_button.add(my_textfield);
textfield_with_button.add(my_button);