Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么';有两个Jpanel的父Jpanel只显示第一个Show本身,而没有两个子Jpanel?_Java_Swing - Fatal编程技术网

Java 为什么';有两个Jpanel的父Jpanel只显示第一个Show本身,而没有两个子Jpanel?

Java 为什么';有两个Jpanel的父Jpanel只显示第一个Show本身,而没有两个子Jpanel?,java,swing,Java,Swing,我正试图用另外两个JPanel创建一个JPanel,但是,当我要显示主JPanel时,它只在主JPanel上显示第一个JPanel 通过以下示例,您将更好地理解问题: 我想要这样的东西: 我想做的两件不同的事情很好;即使如此,如果我尝试将它们放在相同的JPanel上,它也不会 在第一个JPanel,我想添加一个JFileChooser,在另一个部分,我想添加一个拖放文本区域 我试图用这组代码完成上面提到的事情,只显示了第一个Jpanel我错过了什么? 我已经创建了一个主Jpanel: JPan

我正试图用另外两个
JPanel
创建一个
JPanel
,但是,当我要显示主
JPanel
时,它只在主
JPanel
上显示第一个
JPanel

通过以下示例,您将更好地理解问题:

我想要这样的东西:

我想做的两件不同的事情很好;即使如此,如果我尝试将它们放在相同的
JPanel
上,它也不会

在第一个
JPanel
,我想添加一个
JFileChooser
,在另一个部分,我想添加一个
拖放文本区域

我试图用这组代码完成上面提到的事情,只显示了第一个
Jpanel
我错过了什么?

我已经创建了一个
主Jpanel

JPanel container = new JPanel();
container.setLayout(new BoxLayout(container, BoxLayout.X_AXIS));
JPanel panel1 = new JPanel();
panel1.setLayout(new BorderLayout());

JButton button = new JButton("Selecciona el arxiu .txt");
button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent ae) {
        JFileChooser fileChooser = new JFileChooser("C:/Users/Joan/Desktop/");
        int returnValue = fileChooser.showOpenDialog(null);
        if (returnValue == JFileChooser.APPROVE_OPTION) {
            SelectedFile = fileChooser.getSelectedFile();
            //Amb el SelectedFile.getName(); Sabem el nom del arxiu.
            BufferedReader br = null;

            try {
                String sCurrentLine;
                br = new BufferedReader(new FileReader(SelectedFile));

                while ((sCurrentLine = br.readLine()) != null) {
                    System.out.println(sCurrentLine);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (br != null)br.close();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        }
    }
});
panel1.add(button);
然后,我创建了两个
Jpanel
s,将它们放在
主Jpanel
中:

JPanel container = new JPanel();
container.setLayout(new BoxLayout(container, BoxLayout.X_AXIS));
JPanel panel1 = new JPanel();
panel1.setLayout(new BorderLayout());

JButton button = new JButton("Selecciona el arxiu .txt");
button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent ae) {
        JFileChooser fileChooser = new JFileChooser("C:/Users/Joan/Desktop/");
        int returnValue = fileChooser.showOpenDialog(null);
        if (returnValue == JFileChooser.APPROVE_OPTION) {
            SelectedFile = fileChooser.getSelectedFile();
            //Amb el SelectedFile.getName(); Sabem el nom del arxiu.
            BufferedReader br = null;

            try {
                String sCurrentLine;
                br = new BufferedReader(new FileReader(SelectedFile));

                while ((sCurrentLine = br.readLine()) != null) {
                    System.out.println(sCurrentLine);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (br != null)br.close();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        }
    }
});
panel1.add(button);
第二个
Jpanel
看起来像:

JPanel panel2 = new JPanel();
panel2.setBackground(Color.red);
panel2.add(
    new JLabel("Drop a list from your file chooser here:"),
    BorderLayout.NORTH
);
ta = new JTextArea();
ta.setBackground(Color.white);
panel2.add(ta, BorderLayout.CENTER);

dt = new DropTarget(ta, this);
当时,我想把这两个
Jpanel
s放在
主Jpanel
中。我是这样做的。然后,我将其显示为可见:

container.add(panel1, BorderLayout.NORTH);
container.add(panel2, BorderLayout.SOUTH);
container.setVisible(true);
但是,问题是当我尝试启动程序时,它只显示第一个
Jpanel(Jpanel1)
,而另一个
Jpanel
则不显示


我做错了什么或误解了什么?

在容器上不要使用
BoxLayout
,您可能需要尝试使用
GridLayout

container.setLayout(new GridLayout(0, 2));
然后只需添加以下内容即可:

container.add(panel1);
container.add(panel2);
编辑:

完整示例:

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Side {


    public static void main(String[] args) {

        JFrame frame = new JFrame("JFrame");
        JPanel container = new JPanel();
        JPanel panel1 = new JPanel();
        JPanel panel2 = new JPanel();
        panel1.setBackground(Color.blue);
        panel2.setBackground(Color.red);

        container.setLayout(new GridLayout(0, 2));

        container.add(panel1);
        container.add(panel2);

        frame.getContentPane().add(container, BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);

    }
}

不要在容器上使用
BoxLayout
,而应该尝试使用
GridLayout

container.setLayout(new GridLayout(0, 2));
然后只需添加以下内容即可:

container.add(panel1);
container.add(panel2);
编辑:

完整示例:

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Side {


    public static void main(String[] args) {

        JFrame frame = new JFrame("JFrame");
        JPanel container = new JPanel();
        JPanel panel1 = new JPanel();
        JPanel panel2 = new JPanel();
        panel1.setBackground(Color.blue);
        panel2.setBackground(Color.red);

        container.setLayout(new GridLayout(0, 2));

        container.add(panel1);
        container.add(panel2);

        frame.getContentPane().add(container, BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);

    }
}

不要在容器上使用
BoxLayout
,而应该尝试使用
GridLayout

container.setLayout(new GridLayout(0, 2));
然后只需添加以下内容即可:

container.add(panel1);
container.add(panel2);
编辑:

完整示例:

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Side {


    public static void main(String[] args) {

        JFrame frame = new JFrame("JFrame");
        JPanel container = new JPanel();
        JPanel panel1 = new JPanel();
        JPanel panel2 = new JPanel();
        panel1.setBackground(Color.blue);
        panel2.setBackground(Color.red);

        container.setLayout(new GridLayout(0, 2));

        container.add(panel1);
        container.add(panel2);

        frame.getContentPane().add(container, BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);

    }
}

不要在容器上使用
BoxLayout
,而应该尝试使用
GridLayout

container.setLayout(new GridLayout(0, 2));
然后只需添加以下内容即可:

container.add(panel1);
container.add(panel2);
编辑:

完整示例:

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Side {


    public static void main(String[] args) {

        JFrame frame = new JFrame("JFrame");
        JPanel container = new JPanel();
        JPanel panel1 = new JPanel();
        JPanel panel2 = new JPanel();
        panel1.setBackground(Color.blue);
        panel2.setBackground(Color.red);

        container.setLayout(new GridLayout(0, 2));

        container.add(panel1);
        container.add(panel2);

        frame.getContentPane().add(container, BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);

    }
}

如果你没有得到及时的帮助,考虑创建和发布一个或一个你把代码压缩到最小的位,它仍然编译和运行,没有外部依赖关系(比如需要链接到一个数据库或图像),没有额外的与你的问题无关的代码,但是仍然显示出你的问题。如果可能的话,这个小测试程序应该避免文件I/O。@hovercraftfullofels我已经编辑了我的问题,现在可以了吗?当我运行这个代码时(在特别创建的JFrame中使用“container”JPanel,看起来可以了,框架被分成两个JPanel(带按钮和红色的一个)。我不明白我想在我的Jpanel2上添加
dt
,因为我无法在内部添加此DropTarget如果您仍然被卡住,并且如果当前的答案没有提供您寻求的答案,请重新阅读我提供的链接。发布的程序应该很小,但自包含,这意味着我们可以在n-修改,不需要外部文件或依赖项。您仍在发布一段代码,如果我们不努力创建最小的程序,我们就无法运行任何代码。我们不应该能够解决此问题,因为我们比您付出了更多的努力来解决它,而是因为我们能够看到您的错误。请请帮助我们。如果您不立即得到帮助,请考虑创建并发布一个或多个代码,其中您将代码压缩为仍然编译和运行的最小位,没有外部依赖项(例如需要链接到数据库或图像)。,没有与您的问题无关的额外代码,但仍然演示了您的问题。如果可能的话,这个小测试程序应该避免文件I/O。@HovercraftFullOfEels我编辑了我的问题,现在可以了吗?当我运行此代码时(使用“container”JPanel在临时创建的JFrame中,看起来可以了,框架分为两个JPanel)(带按钮和红色按钮)。我不明白我想在我的Jpanel2上添加
dt
,因为我无法在内部添加此DropTarget如果您仍然被卡住,并且如果当前的答案没有提供您寻求的答案,请重新阅读我提供的链接。发布的程序应该很小,但自包含,这意味着我们可以在n-修改,不需要外部文件或依赖项。您仍在发布一段代码,如果我们不努力创建最小的程序,我们就无法运行任何代码。我们不应该能够解决此问题,因为我们比您付出了更多的努力来解决它,而是因为我们能够看到您的错误。请请帮助我们。如果您不立即得到帮助,请考虑创建并发布一个或多个代码,其中您将代码压缩为仍然编译和运行的最小位,没有外部依赖项(例如需要链接到数据库或图像)。,没有与您的问题无关的额外代码,但仍然演示了您的问题。如果可能的话,这个小测试程序应该避免文件I/O。@HovercraftFullOfEels我编辑了我的问题,现在可以了吗?当我运行此代码时(使用“container”JPanel在临时创建的JFrame中,看起来可以了,框架分为两个JPanel)(带按钮和红色按钮)。我不明白我想在我的Jpanel2上添加
dt
,因为我无法在内部添加此DropTarget如果您仍然被卡住,并且如果当前的答案没有提供您寻求的答案,请重新阅读我提供的链接。发布的程序应该很小,但自包含,这意味着我们可以在n-更改,不需要外部文件或依赖项。您仍然发布sni