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