JFrame не открывается при нажатии кнопки - PullRequest
0 голосов
/ 28 марта 2012

у меня два JFrame.

  1. public class Main extends JFrame
  2. public class ColourOption extends JPanel implements ActionListener, который затем устанавливается в JFrame.

Я хотел открыть второй JFrame, когда я нажимаю на кнопку первого JFrame
.setVisible() не работает.Я также попробовал revalidate(), а также invalidate(), validate() во втором JFrame.

Что может быть причиной того, что он не работает?

Ответы [ 2 ]

6 голосов
/ 28 марта 2012

Вам нужно будет создать экземпляр 2-го класса, который имеет 2-й кадр (будет показан) ... и затем, если вы вызовите setVisible (true) .., тогда он должен показать ... что вы делаете ... могли бы вы предоставить свойобработчик событий кнопки ..

, и это не очень хорошая практика

, поэтому лично я бы порекомендовал вам переключиться на лучшие альтернативы, такие как JTABBEDPANES или CARDLAYOUT

и примите во внимание комментарии .. хорошие комментарии, ребята :) .. особенно с использованием JDialog для этого контекста:)

хорошо, если вам все еще нужна помощь в вашем контексте: пример:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class JFrame1 extends JFrame
{
    public JFrame1()
    {
        setLayout(new FlowLayout());
        JButton b=new JButton("Click");
        add(b);
        b.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent ae)
            {
                JFrame jf = new JFrame2();
                jf.setVisible(true);
                jf.setSize(200, 200);
                jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            }
        }
        );
}
    public static void main(String args[])
    {
        JFrame jf = new JFrame1();
        jf.setVisible(true);
        jf.setSize(200, 200);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

и второй класс:

import javax.swing.*;
import java.awt.*;
class JFrame2 extends JFrame
{
    public JFrame2()
    {
        setLayout(new FlowLayout());
        add(new JLabel("2nd Frame"));
    }
}    

Но опять-таки я бы по-прежнему рекомендовал переключиться на другие методы, как я упоминал ранее: tabbedpanes, cardlayout и т. Д. Надеюсь, я помог:)

4 голосов
/ 28 марта 2012

Поскольку они из двух разных классов, вам просто нужно определить / создать экземпляр объекта другого класса ... и если внутри этого 2-го класса (ColourOption) он уже содержит setVisible (true), тогда не должно быть проблем с загрузкой.окно.

 //this will be placed on your constructor
 yourButton.addActionListener(new ButtonListener());

 //listener class
 class ButtonListener implements ActionListener{
   public void actionPerformed(ActionEvent ae){
      if(ae.getSource() == yourButton){
         new ColourOption();
      }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...