Digamos que tengo 1 marco, 1 JDialog y 1 panel. El panel está en el marco. Lo que quiero hacer es si se hace clic en un botón, quiero cambiar la ubicación del panel a JDialog. Necesito dos ventanas, así que uso Jdialog para eso. Tal vez haya una mejor manera de crear esa ventana en lugar de usar JDialog.
Parte de mi código:
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(); } }); } }Hice un ejemplo simple usando dos JFrames, realmente podría hacerse con cualquier tipo de contenedor/diseño.
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); } }Lo más importante que se debe hacer es quitar el panel de un diseño/contenedor, luego agregar el panel de componentes a otro contenedor y finalmente validar/repintar.