Изменение размера JPanel и JPopupMenu автоматически на JPanel

В настоящее время я сталкиваюсь с небольшой проблемой, которая выглядит следующим образом: у меня есть кнопка, которая при нажатии запускает отображение JPopupMenu под ней (я беру расположение кнопки, немного отнимаю ее от высоты и отображаю JPopupMenu), Все это делается в NetBeans с помощью GUI Builder.

JPopupMenu состоит из нескольких JPanels, которые содержат 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, и я действительно не понимаю, как продолжить.

0 ответов

Другие вопросы по тегам