我目前正面临一个小问题:我有一个按钮,当点击它时,会触发它下面的JPopupMenu的显示(我 grab 按钮的位置,从它的高度减去一点并显示JPopupMenu) . 这一切都是在NetBeans中使用GUI构建器完成的 .
JPopupMenu由几个JPanel组成,包含JLabel,Button,TextField和CheckBox . 那些JPanels,我希望它们首先在“最小化”模式下初始化(仅显示标签),但是,当用户点击它们时,也要扩展和显示其他组件 . 再次单击,JPanel将恢复为“最小化”状态 .
现在,我不知道问题究竟在哪里,无论是否调整JPanel的方式,但是当我点击按钮时,弹出菜单显示正确,其他一切,如果我在其中扩展JPanel,弹出菜单没有调整大小 - >无论我做什么,它都有相同的宽度/高度 . 我试图将JPopupMenu使用的布局管理器更改为FlowLayout,BoxLayout,但最终它们没有效果 . 现在,代码中的一些兴趣点:
public class WifiItem extends javax.swing.JPanel {
private final Dimension maxDimension;
private final Dimension minDimension;
private boolean maximized;
public WifiItem() {
initComponents();
setBorder(BorderFactory.createLineBorder(Color.black, 1));
maxDimension = new Dimension(386, 62);
minDimension = new Dimension(386, 32);
maximized = false;
setSize(minDimension);
setPreferredSize(minDimension);
setMinimumSize(minDimension);
setMaximumSize(minDimension);
this.setPreferredSize(minDimension);
this.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (maximized) {
setToMin();
} else {
setToMax();
}
}
});
}
public final void setToMax() {
setSize(maxDimension);
setPreferredSize(maxDimension);
setMinimumSize(maxDimension);
setMaximumSize(maxDimension);
maximized = true;
getParent().revalidate();
}
public final void setToMin() {
setSize(minDimension);
setPreferredSize(minDimension);
setMinimumSize(minDimension);
setMaximumSize(minDimension);
maximized = false;
getParent().revalidate();
}
这是我构建JPopupMenu并设置显示的地方 .
public class WifiConnections {
private static final List<WifiItem> connectionsList = new ArrayList<>();
public static JPopupMenu displayPanel;
public WifiConnections() {
displayPanel = new JPopupMenu();
displayPanel.setLayout(new BoxLayout(displayPanel, BoxLayout.Y_AXIS));
WifiItem newItem = new WifiItem();
newItem.setConnectionId("Connection 1.");
WifiItem newItem2 = new WifiItem();
newItem2.setConnectionId("Connection 2.");
connectionsList.add(newItem);
connectionsList.add(newItem2);
connectionsList.forEach((item) -> {
displayPanel.add(item);
});
}
public void displayPopup(Point p) {
displayPanel.setLocation(p.x, p.y + 34);
displayPanel.setVisible(true);
}
public void hidePopup() {
displayPanel.setVisible(false);
}
}
正如您所看到的,如果我展开一个项目,另一个项目将被覆盖,弹出窗口不会调整大小以适应JPanels,我真的不知道如何继续 .