2017-07-21 4 views
3

Ich versuche, ein Programm mit mehreren Bildschirmen zu programmieren, jedoch möchte ich keine Registerkarten verwenden. Ich habe mir mehrere JPanels mit dem Kartenlayout angeschaut und die Methoden funktionieren einfach nicht. Was ich tun muss, ist das neue JPanel zu laden, wenn auf eine Schaltfläche geklickt wird. Hier ist mein Code:Wie öffne ich ein neues JPanel mit einem JButton?

import java.awt.BorderLayout; 
import java.awt.EventQueue; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.border.EmptyBorder; 
import java.awt.CardLayout; 
import javax.swing.JButton; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 

public class IA extends JFrame { 

    private JPanel contentPane; 
    private JPanel home; 
    private JPanel clients; 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        IA frame = new IA(); 
        frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the frame. 
    */ 
    public IA() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 450, 300); 
     contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     setContentPane(contentPane); 
     contentPane.setLayout(new CardLayout(0, 0)); 

     JPanel home = new JPanel(); 
     contentPane.add(home, "name_714429679706141"); 
     home.setLayout(null); 

     JButton btnClients = new JButton("Clients"); 
     btnClients.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       home.setVisible(false); 
       clients.setVisible(true); 
      } 
     }); 
     btnClients.setBounds(160, 108, 89, 23); 
     home.add(btnClients); 

     JPanel clients = new JPanel(); 
     contentPane.add(clients, "name_714431450350356"); 
     clients.setLayout(null); 

     JButton btnHome = new JButton("Home"); 
     btnHome.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       clients.setVisible(false); 
       home.setVisible(true); 
      } 
     }); 
     btnHome.setBounds(169, 107, 89, 23); 
     clients.add(btnHome); 
    } 

} 

Antwort

0

Das Problem ist, dass Sie doppelte Variablen home und clients haben.

Die folllowing ist Ihr modifizierten Code zu beheben, dass, mit Bemerkungen zu den geänderten Zeilen (fünf Zeilen gesamt):

import java.awt.CardLayout; 
import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.border.EmptyBorder; 

public class IA extends JFrame { 

    private final JPanel contentPane; 
    // private final JPanel home; // REMOVED 
    // private JPanel clients; // REMOVED 

    /** 
    * Launch the application. 
    */ 
    public static void main(final String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        IA frame = new IA(); 
        frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the frame. 
    */ 
    public IA() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 450, 300); 
     contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     setContentPane(contentPane); 
     contentPane.setLayout(new CardLayout(0, 0)); 

     final JPanel home = new JPanel(); 
     contentPane.add(home, "name_714429679706141"); 
     home.setLayout(null); 

     final JPanel clients = new JPanel(); // MOVED UP 
     contentPane.add(clients, "name_714431450350356"); // MOVED UP 
     clients.setLayout(null); // MOVED UP 

     JButton btnClients = new JButton("Clients"); 
     btnClients.addActionListener(new ActionListener() { 
      public void actionPerformed(final ActionEvent e) { 
       home.setVisible(false); 
       clients.setVisible(true); 
      } 
     }); 
     btnClients.setBounds(160, 108, 89, 23); 
     home.add(btnClients); 

     JButton btnHome = new JButton("Home"); 
     btnHome.addActionListener(new ActionListener() { 
      public void actionPerformed(final ActionEvent e) { 
       clients.setVisible(false); 
       home.setVisible(true); 
      } 
     }); 
     btnHome.setBounds(169, 107, 89, 23); 
     clients.add(btnHome); 
    } 

} 
+0

Vielen Dank hinzuzufügen! Es funktioniert perfekt! Ich habe stundenlang gestresst und versucht, das zur Arbeit zu bringen! Danke noch einmal! –

+1

Sorry, ich wusste nicht, dass ich es genehmigen musste. –

0

Wenn der folgende Code die aufgerufen wird clients Variable gleich auf null. diese

JButton btnClients = new JButton("Clients"); 
btnClients.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     home.setVisible(false); 
     clients.setVisible(true); 
    } 
}); 

schreiben:

JPanel clients = new JPanel(); 
contentPane.add(clients, "name_714431450350356"); 
clients.setLayout(null); 
JButton btnHome = new JButton("Home"); 
btnHome.setBounds(169, 107, 89, 23); 
clients.add(btnHome); 

, bevor Sie den Action-Listener

Verwandte Themen