点击自定义时如何关闭JCombobox的下拉列表?
How to close the drop down list of JCombobox when we click on custom?
我有一个 JCombobox,当我从 JCombobox 的下拉列表中 select 任何一个时, selected 项目正在打开但是当我点击其中之一的 "Custom"下拉列表我必须打开一个 daiolg,这里 daiolg 正在打开但下拉列表没有关闭我想在单击自定义时隐藏下拉列表。这是我的示例代码....
private PropertyChangeSupport pcs;///here Iam using ActionListener and PopupMenuListener
public void actionPerformed(ActionEvent ae){
if(ae.getSource() instanceof ComboBox )
{
ComboBox comboBox = (ComboBox)ae.getSource();
Object selectedItem = comboBox.getSelectedItem();
if(selectedItem != null && (!selectedItem.equals("(Custom..)")))
{
pcs.firePropertyChange("ITEM_SELECTED",getCaption(),null);
}}}
public void popupMenuWillBecomeInvisible(PopupMenuEvent e)
{
ComboBox comboBox = (ComboBox)e.getSource();
Object repeatedSelectedItem = comboBox.getSelectedItem();
if(repeatedSelectedItem != null && repeatedSelectedItem.equals("(Custom..)"))
{
invokeCustomFilterDialog(repeatedSelectedItem, comboBox);
}}
private void invokeCustomFilterDialog(Object repeatedSelectedItem, ComboBox comboBox)
{
customFilterDialog.showDialog(); //here Iam opening dailog...
if(customFilterDialog.isCustomFilterAppliedFlag() == true)
{
pcs.firePropertyChange("ITEM_SELECTED",getCaption(),null);
}
else
{comboBox.setSelectedItem(lastSelectedItem);}}
public void popupMenuCanceled(PopupMenuEvent e)
{ }
public void popupMenuWillBecomeVisible(PopupMenuEvent e)
{
ComboBox comboBox = (ComboBox)e.getSource();
this.lastSelectedItem = comboBox.getSelectedItem();
}
combobox.getUI().setPopupVisible(combobox, false);
您可以使用 SwingUtilities.invokeLater
。
例如
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
final JComboBox comboBox = (JComboBox) e.getSource();
final Object repeatedSelectedItem = comboBox.getSelectedItem();
if (repeatedSelectedItem != null
&& repeatedSelectedItem.equals("(Custom..)")) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
invokeCustomFilterDialog(repeatedSelectedItem, comboBox);
}
});
}
}
我有一个 JCombobox,当我从 JCombobox 的下拉列表中 select 任何一个时, selected 项目正在打开但是当我点击其中之一的 "Custom"下拉列表我必须打开一个 daiolg,这里 daiolg 正在打开但下拉列表没有关闭我想在单击自定义时隐藏下拉列表。这是我的示例代码....
private PropertyChangeSupport pcs;///here Iam using ActionListener and PopupMenuListener
public void actionPerformed(ActionEvent ae){
if(ae.getSource() instanceof ComboBox )
{
ComboBox comboBox = (ComboBox)ae.getSource();
Object selectedItem = comboBox.getSelectedItem();
if(selectedItem != null && (!selectedItem.equals("(Custom..)")))
{
pcs.firePropertyChange("ITEM_SELECTED",getCaption(),null);
}}}
public void popupMenuWillBecomeInvisible(PopupMenuEvent e)
{
ComboBox comboBox = (ComboBox)e.getSource();
Object repeatedSelectedItem = comboBox.getSelectedItem();
if(repeatedSelectedItem != null && repeatedSelectedItem.equals("(Custom..)"))
{
invokeCustomFilterDialog(repeatedSelectedItem, comboBox);
}}
private void invokeCustomFilterDialog(Object repeatedSelectedItem, ComboBox comboBox)
{
customFilterDialog.showDialog(); //here Iam opening dailog...
if(customFilterDialog.isCustomFilterAppliedFlag() == true)
{
pcs.firePropertyChange("ITEM_SELECTED",getCaption(),null);
}
else
{comboBox.setSelectedItem(lastSelectedItem);}}
public void popupMenuCanceled(PopupMenuEvent e)
{ }
public void popupMenuWillBecomeVisible(PopupMenuEvent e)
{
ComboBox comboBox = (ComboBox)e.getSource();
this.lastSelectedItem = comboBox.getSelectedItem();
}
combobox.getUI().setPopupVisible(combobox, false);
您可以使用 SwingUtilities.invokeLater
。
例如
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
final JComboBox comboBox = (JComboBox) e.getSource();
final Object repeatedSelectedItem = comboBox.getSelectedItem();
if (repeatedSelectedItem != null
&& repeatedSelectedItem.equals("(Custom..)")) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
invokeCustomFilterDialog(repeatedSelectedItem, comboBox);
}
});
}
}