在JPanel上自动调整JPanel和JPopupMenu的大小

时间:2017-07-05 10:57:00

标签: java swing resize jpanel jpopupmenu

我目前面临的一个小问题是这样的:我有一个按钮,当点击它时,会触发它下面的JPopupMenu的显示(我抓住按钮的位置,从它减去一点'高度并显示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);
}

}

When the popup menu is displayed When item is expaneded

正如您所看到的,如果我展开一个项目,另一个项目将被覆盖,弹出窗口不会调整大小以适应JPanels,我真的不知道如何继续。

0 个答案:

没有答案