2016-03-19 22 views
1

Müşteri siparişlerini (java'da) işlemek için bir başvuru yapıyorum. Programım 3 JFrame penceresine sahiptir (Evet, birden fazla çerçeveyi kullanmak iyi bir fikir olmadığını biliyorum, fakat birbirlerine gerçekten bağlı değiller).Çoklu JFrames

  1. Ana tek: Burada Müşteri siparişi (ana çerçeve> müşteri frame> tamamlandıktan yapar sonra (Müşteri veya Operatör)
  2. Müşteri JFrame
  3. Operatör JFrame

ne seçmek order (button) Ben böyle bir şey yapıyorum:

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); 

C seçiyorum ustomer yine customerframe'u açıyor ama sorun dinleyicilerin artık işe yaramayacağı, sanırım bir şekilde eski çerçeveye veya başka bir şeye bağlı kalıyorlar.

Ben şimdi birkaç saat boyunca çalışmasını sağlamak için çalışıyorlar ...

+0

'u kullanarak paneller arasında geçiş yapabilirsiniz. –

cevap

4

Sen daha fazla bilgi için this bağlantıya bakın JFrames birden kullanarak edilmemelidir.

Bunun yerine, burada gösterildiği gibi bir CardLayout kullanmanızı öneririz:

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); 
    } 
} 

bir Cardlayout ile, JPanel Onun yerine arasında geçiş. Bu şekilde, sadece yeni içerik görüntülemek için yeni bir JFrame oluşturmanız gerekmez. Temel olarak, bir çeşit kapsayıcınız var (JFrame veya JPanel olabilir) ve oluşturduğunuz diğer panelleri eklediğinizde onlara bir ad verin. Daha sonra, cardLayout.show(container, "Name");

+0

Bu yüzden birden fazla JFrames ile çalışmasını imkansız kılıyor mu? –

+1

Bu imkansız değil, sadece tavsiye edilmez. Uzun vadede cardlayout kullanmak çok daha kolay olacaktır. Bir eylem dinleyicisindeki görünümleri tek bir satır ile değiştirebilirsiniz. – Jonah

+0

Anlıyorum, kart çıkışına geçeceğim o zaman. –