2011-07-02 33 views
6

我試圖用一種化合物Swing組件作爲菜單的一部分。的JComboBox在JPopupMenu中

除了一個細節外,一切正常:組件包含JComboBox es,每當用戶點擊其中一個打開其下拉菜單時,下拉菜單打開但菜單消失。單擊JComboBox時是否可以使菜單保持打開狀態?

我子類JMenu。這是相應的代碼:

public class FilterMenu extends JMenu { 

    public FilterMenu(String name) { 
     super(name); 

     final JPopupMenu pm = this.getPopupMenu(); 
     final FilterPanel filterPanel = new FilterPanel(pm) { 
      @Override 
      public void updateTree() { 
       super.updateTree(); 
       pm.pack(); 
      } 
     }; 
     pm.add(filterPanel); 
    } 
} 

FilterPanel是自定義複合組件。該pm.pack()被稱爲適應JPopupMenufilterPanel變化時的大小尺寸。

感謝您的幫助

+1

那不是一個子菜單比的JComboBox比較合適? –

+0

@Max同意@Jesse巴納姆subMenuItem +1 – mKorbel

回答

2

是你的意思this bug

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

public class Test { 

    public static void main(String[] args) { 
     JFrame frame = new JFrame(); 
     frame.setSize(400, 400); 
     frame.setVisible(true); 
     String[] list = {"1", "2", "3", "4",}; 
     JComboBox comb = new JComboBox(list); 
     final JPopupMenu pop = new JPopupMenu(); 
     pop.add(comb); 
     frame.addMouseListener(new MouseAdapter() { 

      @Override 
      public void mousePressed(MouseEvent e) { 
       System.out.println("mousePressed"); 
       pop.show(e.getComponent(), e.getX(), e.getY()); 
      } 
     }); 
    } 
} 
1

看積德OSS」 PopupWindow。這爲這個問題提供了一個簡單易用的解決方案。對我來說工作得很好。

的Javadoc是here