Java - 可执行Jar包装的Applet

时间:2015-06-20 22:15:15

标签: java swing applet jframe jpanel

我已经将Java XML Parser编写为Applet。它以这种形式看起来和运作良好。

Applet

我的问题,如果我想在没有浏览器的情况下运行它,我将如何将其正确包装以作为可执行文件运行?

GUI.java

--------------


import java.applet.*;
import java.awt.*;
import java.awt.event.*;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class GUI extends JPanel implements ActionListener 
{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private Parser xmlEditor;
    private String startTimeValue;
    private String endTimeValue;

    public GUI(){
        init();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            @Override
            public void run() {
                new GUI();
            }
        });
    }
    public void init() {

        this.setXmlEditor(new Parser("C:\\Users\\Administrator\\workspace\\XMLParser\\src\\test.xml"));

        add(new Label("Start Time"));

        startTimeValue = xmlEditor.getStartTimeValue();
        endTimeValue = xmlEditor.getEndTimeValue();


        startTime = new TextField(startTimeValue);

        add(new Label("End Time"));
        endTime = new TextField(endTimeValue);

        save = new Button("save");
        save.addActionListener(this);


        add(startTime);
        add(endTime);
        add(save);

    }

    public void actionPerformed(ActionEvent e) 
    {

        System.out.println(endTime.getText());



        xmlEditor.updateStartTimeValue(startTime.getText());
        xmlEditor.updateEndTimeValue(endTime.getText());

        System.out.println(e);
        System.exit(0);



    }

    public Parser getXmlEditor() {
        return xmlEditor;
    }

    public void setXmlEditor(Parser xmlEditor) {
        this.xmlEditor = xmlEditor;
    }

    TextField startTime, endTime;
    Button save;
}

在使用Swing和JFRame等尝试时,我没有正确布局,或者打开了多个窗口。有人可以提供帮助吗?第二小组继续取代第一小组。我想真正尝试学习如何在可执行jar中放置多个组件是目标。

SwingPaintDemo.java

import java.awt.Label;
import java.awt.TextField;

import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.JFrame;

public class SwingPaintDemo {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }

    private static void createAndShowGUI() {
        System.out.println("Created GUI on EDT? "+
                SwingUtilities.isEventDispatchThread());
        JFrame f = new JFrame("Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        f.setVisible(true);


        Parser myParser = new Parser("C:\\Users\\Administrator\\workspace\\XMLParser\\src\\test.xml");

        JPanel top = new JPanel();
        top.add(new Label("Start Time"));

        TextField startTimeField = new TextField(myParser.getStartTimeValue());
        top.add(startTimeField);
        f.getContentPane().add(top);

        JPanel bottom = new JPanel();
        bottom.add(new Label("End Time"));
        TextField endTimeField = new TextField(myParser.getEndTimeValue());
        bottom.add(endTimeField);
        f.getContentPane().add(bottom);



        f.pack();

    }
}

1 个答案:

答案 0 :(得分:2)

JFrame默认使用BorderLayout,而JPanel使用FlowLayout

不是在JFrame中重建用户界面,只需向其中添加GUI的实例,因为您已经在JPanel中定义了该功能,这样就可以了容易重复使用。

public class SwingPaintDemo {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }

    private static void createAndShowGUI() {
        System.out.println("Created GUI on EDT? "+
                SwingUtilities.isEventDispatchThread());
        JFrame f = new JFrame("Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().add(new GUI());

        f.pack();
        f.setVisible(true);

    }
}

仅供参考:你不应该在任何路径元素中引用srcsrc在构建和打包程序后不会存在。这也是对applet的双重关注,因为applet在严格的安全模型中运行,这会阻止它们默认访问文件系统。

相反,您应该使用Class#getResourceClass#getResourceAsStream,具体取决于您的需求。

this.setXmlEditor(new Parser(getClass().getResource("/test.xml")));
例如,

。您可能需要更改Parser以接受URL和/或InputStream

相关问题