我正在尝试创建另外两个JPanel
的{{1}},但当时当我要显示主JPanel
时,它仅显示主JPanel
上的第一个Jpanel
。
通过以下示例,您将更好地理解这个问题:
我想要这样的事情:
我想要做的两件事情很好;即便如此,如果我试图将它们放在同一个Jpanel
上,它也不会。
在第一个JPanel
上,我想添加JPanel
,在另一部分中,我想添加JFileChooser
。
我正在尝试使用这一堆代码执行上面提到的事情,并且只显示第一个Drag & Drop TextArea
。 我缺少什么?
我创建了Jpanel
:
Main Jpanel
然后,我创建了两个JPanel container = new JPanel();
container.setLayout(new BoxLayout(container, BoxLayout.X_AXIS));
来将它们放在Jpanel
内:
Main Jpanel
第二个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
内。我是这样做的。然后,我把它显示出来:
Main Jpanel
但问题是,当我尝试启动该程序时,它只会显示第一个container.add(panel1, BorderLayout.NORTH);
container.add(panel2, BorderLayout.SOUTH);
container.setVisible(true);
,而其他Jpanel (Jpanel1)
则不显示。
我做错了什么或我误解了什么?
答案 0 :(得分:3)
您可能不想在容器上使用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);
}
}