我正在使用swing组件在java中创建一个文本字段。我想在Mozilla或其他浏览器中创建一个搜索文本字段。
我在文字字段中添加了一个按钮。我设置了JTextField
的边框布局。一切都运行正常,但每当在文本字段中写入大文本时(因为它达到文本字段的给定大小),它就会在按钮后面。正如你们每个人都必须看到的那样,搜索栏中不会出现这种情况。文本不能在按钮后面,而是按钮和文本之间必须有一些间隙。
有谁知道怎么做?
答案 0 :(得分:4)
也许从这样的事情开始:
闪烁的光标位于文本字段的最右侧。
import java.awt.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
class ButtonsInTextField {
JPanel gui = new JPanel(new GridBagLayout());
JTextField textField;
ButtonsInTextField(int cols) {
JPanel textFieldWithButtonsPanel = new JPanel(new FlowLayout(
SwingConstants.LEADING, 5, 1));
textField = new JTextField(cols);
textFieldWithButtonsPanel.add(textField);
addButtonToPanel(textFieldWithButtonsPanel, 8);
addButtonToPanel(textFieldWithButtonsPanel, 16);
addButtonToPanel(textFieldWithButtonsPanel, 24);
// WARNING: Not sensitive to PLAF change!
textFieldWithButtonsPanel.setBackground(textField.getBackground());
textFieldWithButtonsPanel.setBorder(textField.getBorder());
textField.setBorder(null);
// END WARNING:
gui.add(textFieldWithButtonsPanel);
}
private final void addButtonToPanel(JPanel panel, int height) {
BufferedImage bi = new BufferedImage(
// find the size of an icon from the system,
// this is just a guess
24, height, BufferedImage.TYPE_INT_RGB);
JButton b = new JButton(new ImageIcon(bi));
b.setContentAreaFilled(false);
//b.setBorderPainted(false);
b.setMargin(new Insets(0,0,0,0));
panel.add(b);
}
public final JComponent getGui() {
return gui;
}
public final JTextField getField() {
return textField;
}
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
ButtonsInTextField bitf = new ButtonsInTextField(20);
JOptionPane.showMessageDialog(null, bitf.getGui());
}
};
// Swing GUIs should be created and updated on the EDT
// http://docs.oracle.com/javase/tutorial/uiswing/concurrency
SwingUtilities.invokeLater(r);
}
}
答案 1 :(得分:0)
正如上面提到的那样,它可能有助于查看代码,尤其是布局管理器。 但是,您可以尝试以下操作(如果您还没有):
调用setColumns http://docs.oracle.com/javase/7/docs/api/javax/swing/JTextField.html#setColumns(int)
根据您的布局管理器调用setPreferredSize / setMaximumSize / setMinimumSize。 但我试图避免这种解决方案,因为它是像素级维护。
此致
答案 2 :(得分:0)
作为替代解决方案,您可以使用Component Border,它允许您将按钮用作边框,以便它显示在文本字段中。