如何在文本字段中添加按钮?

时间:2014-04-01 05:48:40

标签: java swing jbutton jtextfield

我正在使用swing组件在java中创建一个文本字段。我想在Mozilla或其他浏览器中创建一个搜索文本字段。

我在文字字段中添加了一个按钮。我设置了JTextField的边框布局。一切都运行正常,但每当在文本字段中写入大文本时(因为它达到文本字段的给定大小),它就会在按钮后面。正如你们每个人都必须看到的那样,搜索栏中不会出现这种情况。文本不能在按钮后面,而是按钮和文本之间必须有一些间隙。

有谁知道怎么做?

3 个答案:

答案 0 :(得分:4)

也许从这样的事情开始:

enter image description here

闪烁的光标位于文本字段的最右侧。

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)

正如上面提到的那样,它可能有助于查看代码,尤其是布局管理器。 但是,您可以尝试以下操作(如果您还没有):

  1. 调用setColumns http://docs.oracle.com/javase/7/docs/api/javax/swing/JTextField.html#setColumns(int)

  2. 根据您的布局管理器调用setPreferredSize / setMaximumSize / setMinimumSize。 但我试图避免这种解决方案,因为它是像素级维护。

  3. 此致

答案 2 :(得分:0)

作为替代解决方案,您可以使用Component Border,它允许您将按钮用作边框,以便它显示在文本字段中。