设置JFrame默认值

时间:2014-06-07 01:16:25

标签: java swing jframe

似乎有三行我想知道为什么我需要它们。对我来说,似乎Java可以通过将其设置为默认值并让您关闭来消除此问题。

对我而言,假设我当然希望我的标签显示,退出实际退出,我的文本框可见,否则为什么我会经历所有麻烦来构建。

是否可以删除这些行以使用相同的代码?

import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class GuiClass extends JFrame {
private JLabel myLabel;

public GuiClass(){
    super("The title bar");
    setLayout (new FlowLayout());

    myLabel = new JLabel ("this is a main text");
    myLabel.setToolTipText ("this is the hover text");
    add(myLabel); //why do i need this?
}
}

GuiClassMain

import javax.swing.JOptionPane;
import javax.swing.JFrame;

public class GuiClassMain {
    GuiClass myText = new GuiClass();
    myText.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//why do i need this?
    myText.setSize(275,80);
    myText.setVisible(true);//why do i need this?
}
}

3 个答案:

答案 0 :(得分:1)

  

加(myLabel); //为什么我需要这个?

仅仅因为您创建了一个组件,程序就不知道您要添加组件的位置。您可能有两个不同的面板,这对于更复杂的GUI来说是正常的。它也不知道正在使用什么布局管理器,您可能需要为布局管理器指定一个“约束”。

阅读Using Layout Manager上Swing教程中的部分,了解有关需要约束的布局管理器的更多信息。 BorderLayout将是最容易开始的。

myText.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//why do i need this?

尝试删除该语句,看看会发生什么。谁说你想要永远退出申请?也许你只想隐藏框架,以便重新显示它。

  

myText.setVisible(true); //为什么我需要这个?

这告诉Swing所有组件都已添加到框架中,因此知道您可以显示框架。

答案 1 :(得分:1)

  

myText.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//why do i need this?

这显然允许您更改窗口的默认关闭操作,因为您不希望创建窗口以终止VM。出于安全原因,默认值设置为HIDE_ON_CLOSE,因为您根本不希望创建窗口以终止VM,通常,您只希望主窗口执行此操作...

  

myText.setVisible(true);//why do i need this?

默认情况下,所有窗口在创建时都不可见。这样做有很多原因,主要原因是实际上试图解决窗口内容如何验证的问题。这也意味着当你创建一个窗口时,你可以决定你何时想要显示它,而不是显示什么,一个空白的窗口......

  

add(myLabel); //why do i need this?

这是“为什么不呢?”的问题。您需要将组件与容器相关联,否则它不知道应该在哪里显示它。

因为您可能有许多容器,所有容器都有不同的布局要求,您需要指定每个组件应与哪个容器相关联。

当您创建更复杂的界面时,这将更有意义。

答案 2 :(得分:0)

你是对的。开发人员可以默认创建它们,但这会限制您。您的所有问题仅在只有一个JFrameJPanel时才有效。

  1. 可能有多个JFrameJPanel,您可能希望向其中任何一个添加JLabel。如果默认情况下已完成,则会选择一个并且您无法更改。
  2. 嗯,关闭JFrame时,您可能无法一直退出程序。比如说,你有两个窗口:当主窗口关闭时,它会退出(或终止)程序;但是当从属窗口关闭时,它只处理(JFrame.DISPOSE_ON_CLOSE)从属窗口,主窗口仍在工作 - 这意味着只有 这个从属窗口将被关闭,但程序不会被终止。
  3. 再次考虑创建多个窗口但不想显示所有窗口的情况。默认情况下,所有这些都不可见(对我而言,目前还不清楚为什么默认设置)。
  4. 我会尽快给你举例。