为什么没有两个Jpanel的父Jpanel只显示第一个Show而没有它的两个子Jpanels?

时间:2015-05-10 18:21:46

标签: java swing

我正在尝试创建另外两个JPanel的{​​{1}},但当时当我要显示主JPanel时,它仅显示主JPanel上的第一个Jpanel

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

我想要这样的事情:

Figure 1

我想要做的两件事情很好;即便如此,如果我试图将它们放在同一个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)则不显示。

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

1 个答案:

答案 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);

    }
}