对javaswing和SWING应用程序框架的质疑

对javaswing和SWING应用程序框架的质疑,java,swing,user-interface,swing-app-framework,Java,Swing,User Interface,Swing App Framework,我有一个简单的主类,它使用swing来显示Hello World标签,但我对这段代码有些怀疑,因为这是我第一次用Java创建GUI: import javax.swing.JLabel; import org.jdesktop.application.SingleFrameApplication; public class Main extends SingleFrameApplication { @Override protected void startup() {

我有一个简单的主类,它使用swing来显示Hello World标签,但我对这段代码有些怀疑,因为这是我第一次用Java创建GUI:

import javax.swing.JLabel;

import org.jdesktop.application.SingleFrameApplication;

public class Main extends SingleFrameApplication {

    @Override
    protected void startup() {
        // TODO Auto-generated method stub
        show(new JLabel("Hello World"));
    }

    public static void main(String[] args) {
        Main a = new Main();
        a.startup();
    }

}
我的疑问是:

  • 据我所知,JLabel()方法是一种纯粹的Swing方法,它只创建一个文本标签来显示Hello World消息。这段代码还使用了startup()方法,据我所知,该方法是**SingleFrameApplication类的一个方法,属于所谓的Swing应用程序框架…但是…这Swing应用程序框架到底是什么?这是一个独立于Swing的项目吗?给我什么

  • 当我将应用程序作为经典Java应用程序运行时,会显示Hello World消息,但在Eclipse控制台中也会显示以下错误消息:

  • 2013年12月23日12:35:37 PM org.jdesktop.application.ResourceManager getApplicationResourceMap Avvertenza:getApplicationResourceMap():否 应用类设置2013年12月23日下午12:35:38 org.jdesktop.application.SingleFrameApplication initRootPaneContainer Avvertenza:无法还原会话[mainFrame.session.xml] 位于的java.lang.NullPointerException org.jdesktop.application.LocalStorage.getApplicationId(LocalStorage.java:254) 在 org.jdesktop.application.LocalStorage.getDirectory(LocalStorage.java:274) 在 org.jdesktop.application.LocalStorage$LocalFileIO.getFile(LocalStorage.java:450) 在 org.jdesktop.application.LocalStorage$LocalFileIO.openInputFile(LocalStorage.java:417) 在 org.jdesktop.application.LocalStorage.openInputFile(LocalStorage.java:68) 位于org.jdesktop.application.LocalStorage.load(LocalStorage.java:188) 在 org.jdesktop.application.SessionStorage.restore(SessionStorage.java:381) 在 org.jdesktop.application.SingleFrameApplication.initRootPaneContainer(SingleFrameApplication.java:210) 在 org.jdesktop.application.SingleFrameApplication.show(SingleFrameApplication.java:268) 在Main.startup(Main.java:11)在Main.Main(Main.java:19)上

    为什么??到底是什么意思

    Tnx


    Andrea

    您正在扩展
    SingleFrameApplication
    ,它是一个为您执行UI设置和初始化的框架类,但您没有向它提供任何必要的配置信息。

    您正在扩展
    SingleFrameApplication
    ,它是一个框架类,为您执行UI设置和初始化,但您没有向其提供任何必要的配置信息。

    要创建并显示带有Hello World标签的窗口,您至少需要执行以下操作:

    • 实例化JFrame()
    • 将您的JLabel添加到其中
    • 显示框架
    oracle关于如何制作框架的教程()向您详细介绍了如何制作框架。为了便于参考,我复制了定义/显示窗口的特定摘录

    JFrame frame = new JFrame("FrameDemo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    JLabel emptyLabel = new JLabel("");
    emptyLabel.setPreferredSize(new Dimension(175, 100));
    frame.getContentPane().add(emptyLabel, BorderLayout.CENTER);
    
    //Display the window.
    frame.pack();
    frame.setVisible(true);
    

    要创建并显示带有Hello World标签的窗口,您至少需要执行以下操作:

    • 实例化JFrame()
    • 将您的JLabel添加到其中
    • 显示框架
    oracle关于如何制作框架的教程()向您详细介绍了如何制作框架。为了便于参考,我复制了定义/显示窗口的特定摘录

    JFrame frame = new JFrame("FrameDemo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    JLabel emptyLabel = new JLabel("");
    emptyLabel.setPreferredSize(new Dimension(175, 100));
    frame.getContentPane().add(emptyLabel, BorderLayout.CENTER);
    
    //Display the window.
    frame.pack();
    frame.setVisible(true);
    

    你将不需要扩展JFrame的东西,在那里你可以放置JLabely你将不需要扩展JFrame的东西,在那里你可以放置JLabel