Как показать/скрыть JPanels в JFrame?

Приложение, которое я разрабатываю, — это игра. Что я хочу сделать, так это иметь JPanels, которые появляются в JFrame, как окно текста или сообщения, а затем исчезают, когда они больше не используются. Я разработал эти панели JPanel в Netbeans как внешние классы и хочу иметь возможность вызывать их в методе actionPerformed(). JOptionPanes или другие всплывающие диалоговые окна не подходят, потому что они отвлекают внимание от игры. Я также видел, как кто-то предложил CardLayout в аналогичном вопросе. Это не то, чего я хочу, потому что я не просто пытаюсь поменять местами панели. Они должны исчезнуть, когда программа скажет им об этом. Как мне это сделать, скажем, привязав его к действию JButton?


person aharlow    schedule 26.11.2010    source источник
comment
+1 к вашему вопросу... Игры очень часто имеют свой собственный пользовательский интерфейс. Существует не так много игр, которые используют какой-либо внешний вид Java, по крайней мере, не очень хорошо выглядящие. Какую игру вы делаете? на какие платформы вы ориентируетесь? (очевидно, не iPhone/iPad) [Отказ от ответственности: раньше я профессионально работал в индустрии видеоигр].   -  person SyntaxT3rr0r    schedule 26.11.2010
comment
Спасибо! Это очень простая игра, это ролевая игра от первого лица, в которой в качестве сцен используются статические изображения. Я также надеюсь выяснить, как загружать несколько изображений на экран. Может быть, этот вопрос ответит и на это.   -  person aharlow    schedule 26.11.2010


Ответы (3)


Вы можете скрыть JPanel, вызвав setVisible(false). Например:

public static void main(String args[]){
    JFrame f = new JFrame();
    f.setLayout(new BorderLayout());
    final JPanel p = new JPanel();
    p.add(new JLabel("A Panel"));
    f.add(p, BorderLayout.CENTER);

    //create a button which will hide the panel when clicked.
    JButton b = new JButton("HIDE");
    b.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
                p.setVisible(false);
        }
    });

    f.add(b,BorderLayout.SOUTH);
    f.pack();
    f.setVisible(true);
}
person dogbane    schedule 26.11.2010
comment
Есть только одна проблема: измените p.setVisible(false); по f.setVisible (ложь); чтобы скрыть панель. - person bestyasser; 04.04.2017

Вызовите parent.remove(panel), где parent — это контейнер, в который вы хотите добавить рамку, а panel — это панель, которую вы хотите добавить.

person Mad Physicist    schedule 21.11.2013

Если вы хотите скрыть панель при нажатии кнопки, напишите ниже код в JButton Action. Я предполагаю, что вы хотите скрыть jpanel1.

jpanel1.setVisible(false);
person Shiv Buyya    schedule 16.11.2018