如何将JTextField添加到JFrame的MenuBar中?

10

我一直在尝试重载JMenu并添加一些自定义代码来支持JTextField,但效果不佳。我的主要目的是在菜单项右侧添加一个搜索字段。因此,我希望左侧有像“文件”、“编辑”、“帮助”这样的选项,右侧有搜索栏,就像某些浏览器中有Google搜索栏一样。请问是否有人知道我该如何添加此功能?


为什么进展不顺利?有什么具体的问题困扰着你吗? - mre
1
@mre 我遇到了一个死胡同,我正在尝试添加文本框而不是按钮。JMenuItem继承自AbstractButton,因此我不知道如何添加文本框,而不仅仅是更改AbstractButton上的文本。我也不认为这是添加我所说的功能的最佳方法,因为似乎我可能必须在JMenu深处改变一堆东西。我想我正在寻找关于更好的方法来做这件事情,而不是我目前正在尝试做的事情的指导。 - Grammin
1个回答

24

我从未将其视为JMenuItem,我认为它总是放在JMenuBar中。

输入图像描述

import java.awt.ComponentOrientation;
import javax.swing.*;

public class MenuGlueDemo {

    public MenuGlueDemo() {
        JMenuBar menuBar = new JMenuBar();
        menuBar.add(createMenu("Menu 1"));
        menuBar.add(createMenu("Menu 2"));
        menuBar.add(createMenu("Menu 3"));
        menuBar.add(new JSeparator());
        menuBar.add(new JButton("   Seach ....  "));
        menuBar.add(new JTextField("   Seach ....  "));
        menuBar.add(new JComboBox(new Object[]{"height", "length", "volume"}));
        menuBar.add(Box.createHorizontalGlue());
        menuBar.add(createMenu("About"));
        JFrame frame = new JFrame("MenuGlueDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(menuBar);
        frame.pack();
        frame.setVisible(true);
    }

    public JMenu createMenu(String title) {
        JMenu m = new JMenu(title);
        m.add("Menu item #1 in " + title);
        m.add("Menu item #2 in " + title);
        m.add("Menu item #3 in " + title);
        if (title.equals("About")) {
            m.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        }
        return m;
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                MenuGlueDemo menuGlueDemo = new MenuGlueDemo();
            }
        });
    }
}

1
我希望我能够多次点赞,感谢您提供另一个优秀的答案! - Grammin
不客气,很高兴能帮上忙 +1。将任何JComponent放入JMenuItem中并不容易,我只使用了带有添加JComponents的JDialog/JWindow(GridLayout)来完成这项工作。 - mKorbel
你是不是想说“搜索(Search)”而不是“Seach”? - Spikatrix
@Cool Guy,我那条隧道尽头的光线可能也太微弱了 :-) - mKorbel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接