Search code examples
javajframejpaneljdialog

Changing Jpanel location from Jframe to JDialog


Let's say that I have 1 frame, 1 JDialog and 1 panel. The panel is on the frame. What I want to do is if a button is clicked i wanna switch the location of the panel to JDialog. I need two windows so i use Jdialog for that. Maybe there is a better way of creating that window rather then using JDialog.

Part of my code:

    public class Bestellterminal { 

    private static JPanel panel;

    public static void addComponentsToPane(final Container pane)  {}

    public static void addComponentsToPane1(final Container pane) {}

    public static void addComponentsToPane2(final Container pane) {

    final JPanel kpanel1 = new JPanel();

    kpanel1.setBounds(0 + insets.left, 0 + insets.top, size.width + 900, 
    size.height + 700);
    kpanel1.setVisible(true);


    final JDialog meinJDialog = new JDialog();

    meinJDialog.setTitle("Küchenterminal");
    meinJDialog.setSize(1200,900);
    meinJDialog.setVisible(true);
    meinJDialog.setLayout(null);
    meinJDialog.add(kpanel1);


     Classic.addActionListener(new ActionListener() {

     public void actionPerformed(ActionEvent e) {

             if (brclassic == 1)        {

                 if (kunde == 1) 
     {Bestellpanel.add(buttonx);buttonx.setVisible(true);brclassic++;
                 kpanel1.add(Bestellpanel);
     }
     }
     }


    private static void createAndShowGUI() 

    {

    JFrame frame = new JFrame("test");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     

    addComponentsToPane(frame.getContentPane());
    addComponentsToPane1(frame.getContentPane());
    addComponentsToPane2(frame.getContentPane());

    Insets insets = frame.getInsets();
    frame.setSize(1200 + insets.left + insets.right,
                  900 + insets.top + insets.bottom);
    frame.setVisible(true);

     }

public static void main(String[] args) {

    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI();
        }
    });
    }    
    }

Solution

  • I made a simple example using two JFrames, it could be done with any type of container/layout really.

    package helloworld;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import java.awt.BorderLayout;
    
    /**
     * Created on 4/30/17.
     */
    public class SwapPanel {
    
        public static void main(String[] args){
    
            JPanel panel = new JPanel();
            panel.add(new JLabel("mover"));
    
            JFrame a = new JFrame("frame a");
            JButton aButton = new JButton("swap");
            JFrame b = new JFrame("frame b");
            JButton bButton = new JButton("swap");
            bButton.setEnabled(false);
    
            a.getContentPane().add(aButton, BorderLayout.SOUTH);
            a.getContentPane().add(panel, BorderLayout.CENTER);
    
            b.getContentPane().add(bButton, BorderLayout.SOUTH);
    
            aButton.addActionListener(evt->{
                if(aButton.isEnabled()){
                    aButton.setEnabled(false);
                    a.getContentPane().remove(panel);
                    b.getContentPane().add(panel, BorderLayout.CENTER);
                    bButton.setEnabled(true);
                    a.pack();
                    b.pack();
                    a.repaint();
                    b.repaint();
                }
            });
    
            bButton.addActionListener(evt->{
                if(bButton.isEnabled()){
                    bButton.setEnabled(false);
                    b.getContentPane().remove(panel);
                    a.getContentPane().add(panel, BorderLayout.CENTER);
                    aButton.setEnabled(true);
                    a.pack();
                    b.pack();
                    a.repaint();
                    b.repaint();
                }
            });
    
    
            a.pack();
            a.setVisible(true);
            b.pack();
            b.setVisible(true);
    
            a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            b.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    }
    

    The main thing that needs to be done, first remove the panel from one layout/container, then add the component panel to another container, and finally validate/repaint.