Java 并排创建同一类的多个实例

Java 并排创建同一类的多个实例,java,swing,class,Java,Swing,Class,如何将同一类的3个相同实例并排放置?在下面的代码中,这3个是相互重叠的-我如何修改它使它们并排 import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; public class RestaurantBillCalculatorMain { public static void main(String[] args

如何将同一类的3个相同实例并排放置?在下面的代码中,这3个是相互重叠的-我如何修改它使它们并排

import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class RestaurantBillCalculatorMain {
    public static void main(String[] args) {
        if (args.length != 2) {
            JOptionPane.showMessageDialog(null,
                    "Correct arguments not provided.\nPlease enter database username and password on the command line.\nProgram will now exit.");
        } else {
            JFrame frame = new JFrame();
            JPanel mainPanel = new JPanel();
            mainPanel.setSize(1200, 600);
            mainPanel.setVisible(true);

            RestaurantBillCalculator application1 = new RestaurantBillCalculator(
                    "jdbc:mysql://localhost:3306/restaurant", args[0], args[
            application1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            application1.setSize(400, 600);
            application1.setVisible(true);

            RestaurantBillCalculator application2 = new RestaurantBillCalculator(
                    "jdbc:mysql://localhost:3306/restaurant", args[0], args[1]);
            application2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            application2.setSize(400, 600);
            application2.setVisible(true);

            RestaurantBillCalculator application3 = new RestaurantBillCalculator(
                    "jdbc:mysql://localhost:3306/restaurant", args[0], args[1]);
            application3.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            application3.setSize(400, 600);
            application3.setVisible(true);

            mainPanel.add(application1);
            mainPanel.add(application2);
            mainPanel.add(application3);

            frame.add(mainPanel);

        }
    } // end method main
}
代码中还出现了一个错误:“线程中的异常”main“java.lang.IllegalArgumentException:将窗口添加到容器”。这是什么原因造成的

构造函数的一部分如下所示,我怀疑这与此有关

Container contentPane = getContentPane();
contentPane.setLayout( null );

我对Java基本上是新手,因此仍在学习。

要回答关于使用布局管理器的原始问题,您可以在这里尝试阅读Java教程:

下面是一些简单的入门代码,可以帮助您基本了解如何在一行中水平地重新排列组件:

...
/*
when you add components to the layout, it will 
automatically add them to your mainPanel, so the following is unnecessary.
mainPanel.add(application1);       
mainPanel.add(application2);
mainPanel.add(application3);
*/
frame.add(mainPanel);

GroupLayout layout = new GroupLayout(mainPanel);
mainPanel.setLayout(layout);

//set margins around components by default
layout.setAutoCreateContainerGaps(true);
layout.setAutoCreateGaps(true);    

layout.setHorizontalGroup(layout.createSequentialGroup()
    .addComponent(application1)
    .addComponent(application2)
    .addComponent(application3));

layout.setVerticalGroup(layout.createParallelGroup()
    .addComponent(application1)
    .addComponent(application2)
    .addComponent(application3));

上面的链接有图片,可以更好地显示布局管理器如何解释水平组和垂直组

使用?可能重复的?我们被要求在每个实例中使用绝对定位,我可以使用布局管理器来定位每个实例吗?是的,布局管理器会工作得很好,并且比绝对定位灵活得多。发生错误的原因是您将JFrame添加到JPanel。那就像是想把车塞进人的身体里--简直是疯了。解决方案:不要这样做。根据经验,我可以告诉你,猜测这些东西是行不通的,所以请阅读教程,不要将JFrames放入JPanels中,而是将JPanels放入JFrames中。为什么要使用复杂的GroupLayout,一个更适合代码生成软件的布局管理器,而不是更容易处理的GridLayout?你是对的,GridLayout绝对是这里最好的选择:感谢你们的帮助-我已经尝试添加了上面的代码(我可以理解它是如何工作的),但是我仍然得到了上面提到的java异常?