2015-03-18 3 views
0

Я хочу сохранить панель контроллера как тип JPanel, так как я буду включать в вкладку позже, я хочу поменять местами между Main и NextPage с помощью кнопок на этих экранах, я не хочу иметь последовательные кнопки внизу оба экрана, которые переключаются между картами (т. е. я не хочу добавлять &, чтобы появляться на обоих экранах), я пытаюсь получить кнопку добавления в Main, чтобы перейти к NextPage и обратно в NextPage, чтобы перейти в Main. Это то, что я до сих пор:Использование карты, карты не меняются?

Для контроллера:

import java.awt.CardLayout; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class Controller extends JPanel { 

    private static Controller instance = new Controller(); 

    JPanel cards; 
    Main mainPanel; 
    NextPage nextPage; 

    public Controller() { 
     setLayout(new BorderLayout()); 
     setSize(810, 510); 
     cards = new JPanel(new CardLayout()); 

     mainPanel = new Main(); 
     nextPage = new NextPage(); 
     cards.add(mainPanel, "Main"); 
     cards.add(nextPage, "Next"); 
     add(cards); 
     setVisible(true); 
    } 

    private static void createAndShowGUI() { 
     JFrame frame = new JFrame("MainPanel"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     Controller con = new Controller(); 
     frame.getContentPane().add(con); 
     frame.setSize(800, 600); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 


    public void changeCard(String card) { 
     CardLayout cl = (CardLayout) (cards.getLayout()); 
     cl.show(cards, card); 
    } 

    public static Controller getInstance() { 
     return instance; 
    } 
} 

Для основной:

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.event.*; 
import java.util.*; 

public class Main extends JPanel implements ActionListener { 

    private JButton search, add, delete; 
    private JTextField textField; 

    public Main() { 

     search = new JButton("Search"); 
     add = new JButton("Add"); 
     delete = new JButton("Delete"); 
     textField = new JTextField(20); 
     add.addActionListener(this); 
     delete.addActionListener(this); 
     setLayout(new BorderLayout()); 
     JPanel top = new JPanel(); 
     top.add(search); 
     add(top, BorderLayout.NORTH); 
     JPanel bottom = new JPanel(); 
     bottom.add(add); 
     bottom.add(delete); 
     add(bottom, BorderLayout.SOUTH); 
     setVisible(true); 
     setSize(400, 500); 
    } 

    public void actionPerformed(ActionEvent e) { 
     if (e.getSource() == add) { 
      Controller.getInstance().changeCard("Next"); 
     } else if (e.getSource() == delete) { 
      System.out.println("do something"); 
     } 
    } 

} 

Для СледующаяСтраница:

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.event.*; 
import java.util.*; 

public class NextPage extends JPanel implements ActionListener { 

    private JButton back; 
    private JTextField textField; 

    public NextPage() { 
     back = new JButton("Back"); 
     textField = new JTextField(20); 
     back.addActionListener(this); 
     setLayout(new BorderLayout()); 
     add(back); 
     setVisible(true); 
     setSize(400, 500); 
    } 

    public void actionPerformed(ActionEvent e) { 
     if (e.getSource() == back) { 
      Controller.getInstance().changeCard("Next"); 
     } 

    } 
} 
+0

'private static Controller instance = new Controller();' Удалить 'static ', затем выяснить, как использовать метод экземпляра, и эта проблема, скорее всего, решится сама. Я подозреваю, что вы получаете другой экземпляр 'Controller' к тому, который вы ожидаете. –

ответ

1

Отъезд Card Layout Actions.

Это расширение CardLayout, которое предоставляет вам кнопки Previous/Next, которые вы можете легко добавить на панель отдельно от CardLayout.

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