为什么在从另一个类添加到帧时扩展JPanel?

时间:2017-11-27 00:29:53

标签: java swing user-interface

我将GUI程序分解为可管理的类。 想知道为什么下面的示例代码在我扩展JPanel时有效,但在构造函数中创建JPanel对象时没有。 有人能解释一下吗? 此作品 - >

public class SomePanel extends JPanel{
private JScrollPane scroll;
private JTextArea text;

public SomePanel() {

    // TextArea
    text = new JTextArea(10,50);
    text.setBackground(Color.black);

    // JScrollPane
    scroll = new JScrollPane(text);
    scroll.getHorizontalScrollBar().setEnabled(false);
    scroll.setWheelScrollingEnabled(false); 

    add(scroll);
}

这不起作用 - >

public class SomePanel{

private JScrollPane scroll;
private JTextArea text;
private JPanel panel;

public SomePanel() {

    panel = new JPanel();

    text = new JTextArea(10,50);
    text.setBackground(Color.black);

    // JScrollPane
    scroll = new JScrollPane(text);
    scroll.getHorizontalScrollBar().setEnabled(false);
    scroll.setWheelScrollingEnabled(false); 

    panel.add(scroll);
}

添加到框架等..

public class Frame {
   SomePanel panel;
public Frame(){
      */*
       * Construct frame etc
      */*
       frame.add(panel = new SomePanel());
      }
}

1 个答案:

答案 0 :(得分:2)

这是因为在第二种情况下,SomePanel不是从Component扩展的类,因此无法将其添加到Container(例如JFrame的contentPane)中。要解决此问题,请为类提供一个方法,允许其他类提取其包含的JPanel:

public JComponent getPanel() {
    return panel;
}

并将其添加到您的JFrame:

frame.add(new SomePanel().getPanel());