Java 将Jpanel位置从Jframe更改为JDialog

Java 将Jpanel位置从Jframe更改为JDialog,java,jframe,jpanel,jdialog,Java,Jframe,Jpanel,Jdialog,假设我有一个框架,一个JDialog和一个面板。面板在框架上。我想做的是,如果单击一个按钮,我想将面板的位置切换到JDialog。我需要两个窗口,所以我使用Jdialog。也许有更好的方法来创建该窗口,而不是使用JDialog 我的部分代码: public class Bestellterminal { private static JPanel panel; public static void addComponentsToPane(final Containe

假设我有一个框架,一个JDialog和一个面板。面板在框架上。我想做的是,如果单击一个按钮,我想将面板的位置切换到JDialog。我需要两个窗口,所以我使用Jdialog。也许有更好的方法来创建该窗口,而不是使用JDialog

我的部分代码:

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

我用两个JFrames做了一个简单的例子,它可以用任何类型的容器/布局来完成

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

需要做的主要工作是,首先从一个布局/容器中移除面板,然后将组件面板添加到另一个容器中,最后验证/重新绘制。

要获得面板的位置:因此,如果要在两个窗口上同时显示同一面板,组件只能属于一个父级,您需要创建面板的一个新实例,以便将其添加到另一个windowThx中。但是我不需要在两个窗口上同时安装面板。面板(Bestellpanel)默认位于框架上,我想将包含所有组件的面板(单击按钮)转移到位于JDialog(meinJDialog)的面板(kpanel1)中。非常感谢,接下来的几天我将尝试实现您给我的知识。似乎我无法让您的代码与eclipse一起工作。我在这一行得到错误:(evt->{if(aButton.isEnabled()){我还想问你:如果我从一个容器中移除面板并将其添加到另一个容器中。面板中的组件(例如按钮)是否也转移到新容器中?是的,这就是为什么在我的示例中我移动
panel
,其中包含
JLabel
,你可以制作一个更完整的面板并执行相同的操作eclipse不喜欢我粘贴的代码的原因可能是因为您的语言级别设置较低。如果您使用的是java 8,那么应该编译此代码。哦,好的,我理解。谢谢