Java 设置JFrame默认值
似乎有三行我想知道为什么我需要它们。在我看来,Java似乎可以通过将其设置为默认值并让您关闭来消除这种情况 对我来说,它假设我当然希望我的标签显示,出口实际出口,我的文本框是可见的,否则我为什么要经历所有的麻烦来建立 是否可以删除这些行以获得相同的代码Java 设置JFrame默认值,java,swing,jframe,Java,Swing,Jframe,似乎有三行我想知道为什么我需要它们。在我看来,Java似乎可以通过将其设置为默认值并让您关闭来消除这种情况 对我来说,它假设我当然希望我的标签显示,出口实际出口,我的文本框是可见的,否则我为什么要经历所有的麻烦来建立 是否可以删除这些行以获得相同的代码 import java.awt.FlowLayout; import javax.swing.JFrame; import javax.swing.JLabel; public class GuiClass extends JFrame { p
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?
}
}
圭亚斯曼
添加(myLabel)//为什么我需要这个
仅仅因为您创建了一个组件,程序就不知道您要将组件添加到哪里。您可能有两个不同的面板,这对于更复杂的GUI来说是正常的。它也不知道正在使用什么布局管理器,您可能需要为布局管理器指定一个“约束”
有关需要约束的布局管理器的详细信息,请阅读上Swing教程的部分。BorderLayout
是最容易开始的
尝试删除该语句,看看会发生什么。谁说你总是想退出应用程序?也许您只是想隐藏帧以便可以重新显示
myText.setVisible(true)//为什么我需要这个
这告诉Swing所有组件都已添加到框架中,因此您可以显示框架。您是对的。开发人员可以在默认情况下创建它们,但这将限制您。只有当只有一个
JFrame
或JPanel
时,您的所有问题才有效
JFrame
或JPanel
,您可能希望向其中任何一个添加JLabel
。如果在默认情况下完成,将选择一个,并且您不能更改JFrame
时,可能并不总是退出程序。比如说,您有两个窗口:当主窗口关闭时,它退出(或终止)程序;但是当从属窗口关闭时,它只处理(JFrame.DISPOSE\u ON\u CLOSE
)从属窗口,主窗口仍然工作-这意味着只有该从属窗口将关闭,但程序不会终止myText.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)//我为什么需要这个?
显然,这允许您更改窗口的默认关闭操作,因为您不希望您创建的任何窗口终止VM。出于安全原因,默认值设置为HIDE\u ON\u CLOSE
,因为您根本不希望创建的任何窗口终止VM,通常,您只希望主窗口执行此操作
myText.setVisible(true)//我为什么需要这个?
默认情况下,所有窗口在创建时都不可见。这样做有很多原因,主要原因实际上是试图解决如何验证窗口内容的问题。这也意味着,当你创建一个窗口时,你可以决定什么时候你真的想要它被显示,而不是显示一个什么样的空白窗口
add(myLabel)//我为什么需要这个?
这是一个“为什么不?”的问题。您需要将一个组件与一个容器相关联,否则它就不知道应该在哪里显示它
因为您可能有许多容器,所有容器都具有不同的布局要求,所以您需要指定每个组件应与哪个容器关联
当您创建更复杂的接口时,这将更有意义。在很多情况下,您可能希望
myText.setVisible()
最初为false
,最初为true
,甚至动态更改。与其他两种情况类似,有无数种情况需要创建对象,但从来没有在GUI上绘制过对象,也没有用户可以使用对象。行数减少并不一定意味着执行时间缩短。这些行对于您希望程序执行的操作是绝对必需的。如果Java库开发人员将其设置为默认值,那么这些行将被移动到JFrame
的定义中,而不是在程序中。他们仍然会在那里。这个问题似乎是离题的,因为它涉及的问题很容易通过咨询和尝试这些方法的不同值的代码进行排序。谢谢大家的回答和评论。这有助于我更好地理解这些概念@AndrewThompson是的,我知道文件中有。但这不是什么或如何的问题,而是为什么。我知道你已经编程几十年了,但是当你还在“hello world”阶段时,这些东西都是新的。谢谢!这真的很有帮助。在我的简单程序中,它似乎只是一个额外的行,但随着我的程序变得越来越复杂,我会很高兴当前的默认设置是这样的。谢谢Paul!这是有道理的。我是新来的,还处于“你好世界”阶段,所以我只想到一个窗口。但你是对的,当我开始使用多个窗口时,我会欣赏当前的默认设置。@ldfreeman不用担心。我一整天都很忙,所以我不能给你举个例子(我希望很快能给你举个例子)。如果您发现任何给定的答案都是您想要的,请不要忘记通过单击答案左侧的勾号来接受它。@ldfreeman您也可以通过单击任何答案左侧的顶面三角形来向上投票。嗨,Paul,我很愿意,但我是新来的,还没有投票代表。但一旦我达到15分,我会的。谢谢你的帮助!谢谢你的链接camickr!这是一个非常容易遵循的教程。
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?
}
}
myText.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//why do i need this?