如何将包含组件的JPanel对象添加到JFrame

时间:2016-11-24 09:27:21

标签: java swing jpanel

我想将一个JPanel类型的对象添加到JFrame。

我正在尝试这个,但没有添加Jpanel。

这个想法是:向P2添加具有P5类中定义的组件的P5。

可能会发生什么?,我不想在First_view类中创建所有JPanel,因为代码会搞砸了很多。

代码:

import javax.swing.*;
import java.awt.*;

public class First_view extends JFrame {

    Container Frame;

    public First_view() {
        super("title");
        Frame = this.getContentPane();
        Frame.setLayout(new BorderLayout());

        Frame.add((new P2()), BorderLayout.WEST);

        setSize(900, 500);
        setLocationRelativeTo(null);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
}

class P2 extends JPanel {

    public P2() {
        this.setLayout(new BorderLayout());

        add((new P5()), BorderLayout.NORTH);
    }
}

class P5 extends JPanel {

    JScrollPane informacion = new JScrollPane(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    JTextArea T1 = new JTextArea();

    public P5() {
        setLayout(new FlowLayout());
        setBorder(BorderFactory.createEmptyBorder(20, 10, 0, 0));
        add(setInformacion());
    }

    private JScrollPane setInformacion() {
        T1.append("Information, bla bla bla");

        T1.setEditable(false);
        T1.setBorder(BorderFactory.createLineBorder(Color.BLACK));
        T1.setLineWrap(true);
        informacion.add(T1);
        informacion.setBorder(BorderFactory.createLineBorder(Color.BLACK));
        return informacion;
    }
}

PIC:

enter image description here

1 个答案:

答案 0 :(得分:3)

要添加<{1}}中要显示的组件,请改为使用JScrollPane

setViewportView

Obs:传递给private JScrollPane setInformacion() { T1.append("Information, bla bla bla"); ... informacion.setViewportView(T1); ... informacion.setBorder(BorderFactory.createLineBorder(Color.BLACK)); return informacion; } 的构造函数的参数顺序错误,即垂直警察首先出现:

JScrollPane

编辑:正如Andrew所评论的,扩展一个类只是为了使用它(JFrame,JPanel)并不是一个好主意。例如,我尽量不改变原来的流量:     包cfh.test;

JScrollPane informacion = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
                                          JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);