2016-03-19 9 views
1

Ich mache eine Anwendung für die Verarbeitung von Kundenbestellungen (in Java). Mein Programm hat 3 JFrame Windows (Ja, ich weiß, es ist keine gute Idee, mehrere Frames zu verwenden, aber sie sind nicht wirklich miteinander verbunden).Mehrere JFrames

  1. Haupt ein: Hier wählen Sie, was Sie sind (Kunde oder Operator)
  2. Kunden JFrame
  3. Operator JFrame

Nachdem ein Kunde eine Bestellung macht (Hauptrahmen> Kunden Rahmen> komplett Bestellung (Knopf) Ich mache etwas in der Art:

customerframe.dispose(); 
customerframe.revalidate(); 
customerframe.repaint(); 
reloadframe(); ///a method which reinitializes the frame (Note: I am doing a frame=new JFrame() here) 
mainframe.setVisible(true); 

Ich wähle c ustomer wieder öffnet es die customerframe aber das Problem ist, dass die Zuhörer nicht mehr arbeiten, ich denke, sie bleiben irgendwie mit dem alten Rahmen oder etwas verbunden.

Ich habe versucht, es jetzt für einige Stunden arbeiten zu lassen ...

+0

ich habe es bereits gelesen haben. –

Antwort

4

Sie sollten für weitere Informationen nicht mehrfach verwenden this Link JFrames See.

Stattdessen schlage ich vor, Sie verwenden ein CardLayout wie hier gezeigt:

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

public class MainFrame 
{ 
    static JPanel homeContainer; 
    static CardLayout cl; 

    JPanel homePanel; 
    JPanel otherPanel; 


    public MainFrame() 
    { 
     JFrame mFrame = new JFrame("CardLayout Example"); 
     JButton showOtherPanelBtn = new JButton("Show Other Panel"); 
     JButton backToHomeBtn = new JButton("Show Home Panel"); 

     cl = new CardLayout(5, 5); 
     homeContainer = new JPanel(cl); 
     homeContainer.setBackground(Color.black); 

     homePanel = new JPanel(); 
     homePanel.setBackground(Color.blue); 
     homePanel.add(showOtherPanelBtn); 

     homeContainer.add(homePanel, "Home"); 

     otherPanel = new JPanel(); 
     otherPanel.setBackground(Color.green); 
     otherPanel.add(backToHomeBtn); 

     homeContainer.add(otherPanel, "Other Panel"); 

     showOtherPanelBtn.addActionListener(e -> cl.show(homeContainer, "Other Panel")); 
     backToHomeBtn.addActionListener(e -> cl.show(homeContainer, "Home")); 

     mFrame.add(homeContainer); 
     cl.show(homeContainer, "Home"); 
     mFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     mFrame.setLocationRelativeTo(null); 
     mFrame.setExtendedState(JFrame.MAXIMIZED_BOTH); 
     mFrame.pack(); 
     mFrame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     SwingUtilities.invokeLater(MainFrame::new); 
    } 
} 

Mit einem Cardlayout wechseln Sie zwischen JPanel ist statt. Auf diese Weise müssen Sie keinen neuen JFrame erstellen, nur um neuen Inhalt anzuzeigen. Im Grunde haben Sie eine Art Container, (könnte die JFrame sein oder könnte eine JPanel sein) und dann, wenn Sie die anderen Panels hinzufügen, die Sie erstellen, geben Sie ihnen einen Namen. Sie können dann zwischen den Panels mit cardLayout.show(container, "Name");

+0

Es ist also unmöglich, es mit mehreren JFrames arbeiten zu lassen? –

+1

Es ist nicht unmöglich, nur nicht zu empfehlen. Die Verwendung eines Kartenlayouts wird auf lange Sicht viel einfacher sein. Sie können Ansichten mit einer Codezeile in einem Aktionslistener wechseln. – Jonah

+0

Ich sehe Danke, ich werde dann zu Cardlayout wechseln. –

Verwandte Themen