如何获取 JComboBox 弹出菜单列表作为组件对象
How can I get the JComboBox popupmenu list as component object
在我的 swing 应用程序中,我有一个带有 Combobox 的对话框。在我应用 AffineTransformation 。所有组件都在调整大小,但 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);
}
}
}
}
组合框不是 JCombobox 的子项时显示的 JPopupMenu。所以 AffineTransformation 将不适用于它。
您可以使用以下代码获取弹窗组件
JComboBox combo = ...;
BasicComboPopup popup = (BasicComboPopup) combo.getUI().getAccessibleChild(combo, 0);
在我的 swing 应用程序中,我有一个带有 Combobox 的对话框。在我应用 AffineTransformation 。所有组件都在调整大小,但 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);
}
}
}
}
组合框不是 JCombobox 的子项时显示的 JPopupMenu。所以 AffineTransformation 将不适用于它。
您可以使用以下代码获取弹窗组件
JComboBox combo = ...;
BasicComboPopup popup = (BasicComboPopup) combo.getUI().getAccessibleChild(combo, 0);