2011-11-14 153 views
9

我一直在試圖重載JMenu並放入一些自定義代碼來支持JTextField,但是這樣做並不順利。我的主要目的是在我的菜單項右側添加一個搜索字段。所以我有類似File,Edit,左邊的幫助,然後右邊是搜索欄,就像在某些瀏覽器中有一個谷歌搜索欄。有沒有人有一個想法如何我可以去添加此功能?如何將JTextField添加到JFrame的MenuBar?

+0

爲什麼是不是順利?什麼*特別*似乎在困擾着你? – mre

+1

@mre我遇到了一個死路,我試圖添加文本框而不是按鈕。 JMenuItem繼承自AbstractButton,所以我不知道如何添加文本框,而不是僅僅更改AbstractButton上的文本。我也不相信這是添加我所談論的功能的最佳方式,因爲看起來我可能不得不圍繞JMenu中的一堆東西進行更改。我想我正在尋找一個更好的方式來做到這一點,然後我目前正在嘗試做的指導。 – Grammin

回答

18

我從來不認爲這是JMenuItem,我認爲alyways放在JMenuBar

enter image description here

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

+0

歡迎您,很高興幫助+1,並且不容易將任何JComponent添加到JMenuItem中,我用於只添加了JComponents的JDialog/JWindow(GridLayout) – mKorbel

+0

好的,感謝您的建議 – Grammin