如果不扩展JFrame,可以进行调整吗?

时间:2014-01-15 21:04:11

标签: java swing user-interface jframe

我一直在从YouTube视频学习Java Swing GUI,因为直到大学下学期结束才学到它们,我觉得等待太有趣了。然而,尽管视频制作者已经很容易理解,而且我已经学到了很多东西,但我可以说他可能是自己学习的,因为他的一些编码实践与我们在学校学到的有点不同。 (例如,他不关心封装或骆驼案。)这让我担心我所学的一切都将毫无用处。

他在视频中所做的所有项目都在一个类中,使用实现ActionListener,MouseListener等的内部类。所以我不知道如何将我从这些视频中学到的内容与无GUI的多类项目联系起来我在学校期间工作。

我将举一个关于项目如何的一般例子:(我只是添加私有,因为这就是我习惯的)

public class Something extends JFrame {
   private JPanel topPanel;
   private JPanel bottomPanel;
   private JLabel label;
   private JButton button;

   public Something() {

    Container pane = this.getContentPane(); //need help with this

    topPanel = new JPanel();
    topPanel.setLayout(new GridLayout(1,1));

    label = new JLabel("x");
    topPanel.add(label);
    pane.add(topPanel);

    bottomPanel = new JPanel();
    bottomPanel.setLayout(new GridLayout(1,1));

    button = new JButton("Button");
    bottomPanel.add(button);
    pane.add(bottomPanel);

    Event e = new Event();
    button.addActionListener(e);

  }

  public class Event implements ActionListener {

   }

另外,我在这里阅读了另一个关于为什么扩展JFrame是一个坏主意的线程。如果我必须容纳,我会创建一个JFrame框架,然后添加(框架)?然后确保我将下一层添加到框架中?我需要做些什么?

1 个答案:

答案 0 :(得分:1)

通常,您不应该扩展JFrame。相反,扩展JPanel。例如您的代码可能如下所示:

public class Something extends JPanel {
  // very similar code to yours goes here
  // though I'd set a specific LayoutManager
}

现在你有了更多的灵活性:你可以将精彩的GUI添加到JFrame,JDialog或另一个更复杂的JPanel中。 e.g。

JDialog dialog = new JDialog();
JPanel reallyComplexPanel = new JPanel(new BorderLayout());
// add in stuff here, e.g buttons at the bottom
Something mySomething = new Something();
reallyComplexPanel .add(mySomething, BorderLayout.NORTH);  // my stuff at the top
dialog.setContentPane(reallyComplexPanel);