2013-07-28 4 views
0

Я хочу изменить JPanels, нажав JButton. Ну, я могу сделать это один раз, но проблема в том, когда я хочу вернуться к предыдущей JPanel. Вот мой код:Изменение JPanel после нажатия JButton

public class MindCreations { 

public static void main(String[] args){ 

    Adj0 object1= new Adj0(); 
    object1.setSize(500, 600); 
    object1.setVisible(true); 
    object1.setLocation(700,300); 
} } 

    public class Adj0 extends JFrame{ 
      public Adj0(){ 
    super("MindCreations"); 
    this.setLayout(null); 

    adj0panel object9=new adj0panel(); 
    add(object9.adj0panel()); 
    Isa object10=new Isa(); 
    add(object10.Isa()); 
    } } 

    public class adj0panel { 
      private JButton quarto; 
      private FlowLayout layout; 

     public JPanel adj0panel(){ 

     final JPanel panel=new JPanel(); 
     JLabel jl=new JLabel(); 
     panel.setLayout(layout); 
      quarto= new JButton("Tabela ISA"); 
      quarto.setBounds(50,490,400,20); 
      jl.setIcon(new ImageIcon("2.png")); 
     jl.setBounds(40, 50, 413, 300); 

      panel.add(jl); 
      panel.add(quarto); 

      quarto.addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent event){ 
     Isa object3=new Isa(); 
     panel.setVisible(false); 
    } 
     }); 
return panel; 
    } 
} 

    public class Isa { 
    public JPanel Isa(){ 

      final JPanel panel1=new JPanel(); 

    panel1.setLayout(layout); 
    panel1.setBounds(0, 0, 500, 600); 
    panel1.setBackground(Color.WHITE); 
    panel1.setVisible(true); 

      JButton retroceder=new JButton("Retroceder"); 
    retroceder.setBounds(300, 460, 90, 20); 

    retroceder.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent event){ 
      adj0panel object4=new adj0panel(); 
      panel1.setVisible(false); 

      }} 
    ); 

      panel1.add(retroceder); 
    return panel1; 
}} 

Я хочу нажать на кнопку «retroceder», и я хочу, чтобы перейти к JPanel из adj0panel класса. Извините за длинный вопрос, я в этом начинаю. Если есть какой-либо другой способ изменить JPanels, пожалуйста, скажите мне. спасибо

ответ

0

Итак, как вы, вероятно, выяснили, JFrame может содержать только один JPanel в контейнере.

Это:

frame.getContentPane(); 

считается "верхнего уровня" JPanel. Вы можете добавлять и удалять панели на верхнем уровне, так же, как и сейчас. Чтобы отслеживать несколько панелей, я бы получил метод Stack и push() pop(), подключенный к вашей кнопке, который сначала нажимал бы все панели на мастер JPanel, а затем выскакивал из стека и удалял соответствующий JPanel из стек пословиц в мастер-контейнере.

setVisible() может работать, но если у вас несколько панелей, самая верхняя панель может «скрывать» панели под собой, что приводит к неожиданным результатам от setVisible(). Свинг тяжелый. Вот те документы, которые поддерживают это вверх: Top-Level Containers

+0

hmm Я вижу, но где в моей программе я могу добавить «frame.getContentPane()», должен ли я добавить в actionlistener JButton «retroceder», и если да, то как мне его написать? – user2627865

+0

Я бы написал метод загрузчика, который принимает фрейм как параметр, а другой метод принимает панель кадра и загружает панели из объекта стека. Я предполагаю, что этот материал может быть в вашем основном методе или классе FactoryLoader в заводском стиле –

0

я попытался сделать погрузчик, ИДК, если это было это, что вы сказали мне, но, возможно, он работает в любом случае.

public class Adj0 extends JFrame{ 

    private FlowLayout layout; 

     public Adj0(){ 
    super("MindCreations"); 
    this.setLayout(layout); 
    this.setSize(500, 600); 
    this.setLocation(700,300); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    this.setVisible(true); 
    dsa(1); 

    } 

public void dsa(int test){ 
    Isa object10 =new Isa();  
    adj0panel object0 =new adj0panel(); 

    if(test==1){ 
    this.getContentPane().removeAll(); 
    this.setContentPane(object0.adj0panel()); 
    this.getContentPane().revalidate(); 
    repaint(); 
    this.setLayout(null); 

} 
    else if(test==2){ 
     this.getContentPane().removeAll(); 
     this.setContentPane(object10.Isa()); 
     this.getContentPane().revalidate(); 
     this.setVisible(true); 
     repaint(); 
     this.setLayout(null); 

    } 
    } 

, а затем на кнопку я писал:

 quarto.addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent event){ 

     Adj0 object3=new Adj0(); 
     object3.dsa(2); 

вещь, когда я нажимаю на кнопку Создать новый JFrame с панелью, что я хочу, я только хочу, чтобы изменить содержание. Я думаю, что я не удаляю предыдущую контентную панель правильным способом ... возможно, вы можете рассказать мне несколько советов.

Смежные вопросы