Показать JPanel в верхней части карты, заполненной другими панелями - PullRequest
0 голосов
/ 12 мая 2018

, так что я создаю Java-программу Swing для управления студентами, но у меня возникла проблема. Ниже приведена ссылка с изображением, которая дает подсказку, как настоящая программа находится слева, у нас есть панель меню.в правой части у нас есть главная панель с макетом карты, когда щелкается определенное меню с левой стороны, главная панель добавляет соответствующую панель в верхней части макета карты, как на рис., если я нажимаю красную кнопку, правая сторона отображается краснымПанель, то, что я хочу сделать, это когда я нажимаю кнопку настроек, чтобы отобразить панель поверх активной панели, я пытался установить set visible, но логически это работает только с этой панелью.настраивая панели на каждой из панелей и устанавливая их видимость true каждый раз, когда нажимаются настройки кнопок, но это не очень хороший способ, потому что если бы у нас было 10 меню, мы бы создали 10 панелей настройки, я проверил в Интернете любой порядок Z-компонентов, ничего полезногонайдено, вы можете увидеть в Microsoft майЯ хочу, чтобы их настройки открывались с левой стороны, это мое намерение.Example

1 Ответ

0 голосов
/ 12 мая 2018

Вам необходимо использовать стеклянную панель .Вот мой пример для вас.

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

public class RightSidePanel implements Runnable {

    @Override
    public void run() {
        JFrame frm = new JFrame("Right side panel");
        frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        // next two lines are not required
        JPanel contentPanel = new JPanel(new BorderLayout());
        frm.setContentPane(contentPanel);
        JPanel mainPanel = new JPanel(new CardLayout());
        mainPanel.add(new JLabel("It's the first card panel"), "first");
        mainPanel.add(new JLabel("It's the second card panel"), "second");
        // add some components to provide some width and height for the panel.
        mainPanel.add(Box.createHorizontalStrut(600));
        mainPanel.add(Box.createVerticalStrut(300));
        mainPanel.setBackground(Color.CYAN);
        JPanel settingsPanel = new JPanel(new GridLayout(1, 1));
        settingsPanel.add(new JLabel("Here is the settings panel!"));
        settingsPanel.setPreferredSize(
                new Dimension(settingsPanel.getPreferredSize().width, 300));
        ((JComponent) frm.getGlassPane()).setLayout(new FlowLayout(FlowLayout.RIGHT, 0, 0));
        ((JComponent) frm.getGlassPane()).add(settingsPanel, BorderLayout.EAST);
        JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 10, 10));
        JButton settingsButton = new JButton("Show settings");
        settingsButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                frm.getGlassPane().setVisible(!frm.getGlassPane().isVisible());
                if (frm.getGlassPane().isVisible()) {
                    settingsButton.setText("Hide settings");
                } else {
                    settingsButton.setText("Show settings");
                }
            }
        });
        JButton switchButton = new JButton("Show second");
        switchButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                CardLayout cl = (CardLayout) mainPanel.getLayout();
                if (mainPanel.getComponent(0).isVisible()) {
                    cl.show(mainPanel, "second");
                    switchButton.setText("Show first");
                } else {
                    cl.show(mainPanel, "first");
                    switchButton.setText("Show second");
                }
            }
        });
        buttonPanel.add(switchButton);
        buttonPanel.add(settingsButton);
        frm.add(mainPanel, BorderLayout.CENTER);
        frm.add(buttonPanel, BorderLayout.SOUTH);
        frm.pack();
        frm.setLocationRelativeTo(null);
        frm.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new RightSidePanel());
    }
}
...