Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将JComboBox弹出菜单列表作为组件对象获取_Java_Swing_Listener_Jcombobox_Popupmenu - Fatal编程技术网

Java 如何将JComboBox弹出菜单列表作为组件对象获取

Java 如何将JComboBox弹出菜单列表作为组件对象获取,java,swing,listener,jcombobox,popupmenu,Java,Swing,Listener,Jcombobox,Popupmenu,在我的swing应用程序中,我有一个带有Combobox的对话框。在本文中,我正在应用仿射变换。所有组件都在调整大小,但除JComponent外,弹出菜单列表没有缩放。我正在尝试使用事件获取ComboBox的Popupmenu对象 public static void displayComp(JComponent jComponent) { if (jComponent != null) { final Container awtContainer = (Contain

在我的swing应用程序中,我有一个带有Combobox的对话框。在本文中,我正在应用仿射变换。所有组件都在调整大小,但除JComponent外,弹出菜单列表没有缩放。我正在尝试使用事件获取ComboBox的Popupmenu对象

 public static void displayComp(JComponent jComponent) {
    if (jComponent != null) {
        final Container awtContainer = (Container) jComponent;
        final Component[] components = awtContainer.getComponents();
        for (Component comp : components) {
            if (comp instanceof JComboBox) {

                JComboBox<JComponent> b = (JComboBox<JComponent>) comp;
                b.addActionListener(new ActionListener() {

                    @Override
                    public void actionPerformed(ActionEvent e) {
                        System.out.println("e::" + e);
                        JMenuItem mi = (JMenuItem) e.getSource();
                        JPopupMenu popup = (JPopupMenu) mi.getParent();
                        System.out.println("popup:::" + popup);
                    }
                });
                System.out.print("JComboBox :::");
                System.out.println(comp.getPreferredSize() + "***Component**" + comp.getName());
            }

            if (comp instanceof JComponent) {
                displayComp((JComponent) comp);
            }
        }
    }
}
publicstaticvoiddisplaycomp(JComponent JComponent){
如果(jComponent!=null){
最终容器AWT容器=(容器)JC组件;
最终组件[]组件=awtContainer.getComponents();
用于(组件组件:组件){
if(JComboBox的组件实例){
JComboBox b=(JComboBox)comp;
b、 addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
System.out.println(“e::”+e);
JMenuItem mi=(JMenuItem)e.getSource();
JPopupMenu popup=(JPopupMenu)mi.getParent();
System.out.println(“弹出::”+弹出);
}
});
System.out.print(“JComboBox:”);
System.out.println(comp.getPreferredSize()+“***组件**”+comp.getName());
}
if(JComponent的组件实例){
显示组件((JComponent)comp);
}
}
}
}

当combobox不是JCombobox的子项时,将显示OpupMenu。因此仿射转换将不适用于它。

您可以使用以下代码获得弹出组件

JComboBox combo = ...;
BasicComboPopup popup = (BasicComboPopup) combo.getUI().getAccessibleChild(combo, 0);