如何调整jws applet窗口的大小?

时间:2012-10-08 05:51:58

标签: java jframe awt jnlp java-web-start

我正在使用JWS来启动我的应用程序。 我需要重置我的JFrame大小,不应该调整大小。我试过了 frame.setSize(new Dimension(500, 500));frame.setResizable(false);无效。我浏览了论坛并尝试了其他可用选项。我的完整代码是

/**
 * 
 */
package com.bus.oprs;

import java.util.Properties;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Insets;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.image.BufferedImage;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.plaf.basic.BasicBorders;
import javax.swing.plaf.basic.BasicBorders.ButtonBorder;

import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.MalformedURLException;

// classes of the web-start API, used in this example.
import javax.imageio.ImageIO;
import javax.jnlp.BasicService;
import javax.jnlp.ServiceManager;
import javax.jnlp.UnavailableServiceException;

/**
 * @author sreekanth
 * @date Aug 29, 2012 11:33:16 AM
 * @version 1.0
 */
public class ApsrtcOprsJNLP extends JFrame {

    private static final long serialVersionUID = 8221867230431906706L;
    private Color titleColor = new Color(241,248,255);
    final private JPanel panel = new JPanel();
    final Properties properties = new Properties();
    /**
     * @throws IOException, URISyntaxException 
     */
    public ApsrtcOprsJNLP() throws IOException, URISyntaxException {
    super();
    launchApplication();
    }


    private void loadProperties() {
    try {
        InputStream inputStreamUrl = this.getClass().getResourceAsStream("/AppResources.properties");
        properties.load(inputStreamUrl);
    } catch (Exception e) {
        e.printStackTrace();
    }
    }

    private void setButtonProperties(JButton button){
    try {
        Color buttonColor =  new Color(102,153,255);
        button.setBackground(buttonColor);
        button.setForeground(Color.WHITE);
        button.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
    } catch (Exception e) {
        e.printStackTrace();
    }
    }

    private void launchApplication() throws IOException, URISyntaxException {
    JLabel clickMessageLabel = null;
    JLabel label = null;
    Dimension dimension = null;
    try {
        final BasicService basicService = (BasicService) ServiceManager.lookup("javax.jnlp.BasicService");
        dimension = new Dimension(400, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.loadProperties();
        setTitle(properties.getProperty("app.title"));

        UIManager.put("InternalFrame.activeTitleBackground", new javax.swing.plaf.ColorUIResource(titleColor));  
        JFrame.setDefaultLookAndFeelDecorated(true); 
        panel.setBackground(titleColor);

        label = new JLabel(properties.getProperty("app.welcome.msg"));
        Font newLabelFont = new Font(label.getFont().getName(), Font.BOLD, label.getFont().getSize());

        label.setHorizontalAlignment(SwingConstants.CENTER);
        panel.add(label);
        label.setFont(newLabelFont);

        clickMessageLabel = new JLabel(properties.getProperty("app.click.link.txt"));
        clickMessageLabel.setHorizontalAlignment(SwingConstants.CENTER);
        panel.add(clickMessageLabel);
        clickMessageLabel.setFont(newLabelFont);

        String[] jButton = properties.getProperty("urls").split(",");
        String[] jLabel = properties.getProperty("urlLabels").split(",");

        for (int i = 0; i < jLabel.length; i++) {
            JLabel labels = new JLabel(jLabel[i]);
            panel.add(labels);
            JButton button = new JButton(jButton[i]);
            this.setButtonProperties(button);
            button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
            try {
                URL url = new URL(ae.getActionCommand());
                basicService.showDocument(url);
                setVisible(false);
                dispose();
            } catch (MalformedURLException murle) {
                JOptionPane.showMessageDialog(panel,
                    murle.getMessage());
            }
            }
        });
            panel.add(button);
        }

        panel.setBorder(new EmptyBorder(8, 8, 8, 8));
        setSize(dimension);
        setResizable(false);
        getContentPane().add(panel);        
        pack();

        setLocationRelativeTo(null);
    } catch (UnavailableServiceException use) {
        use.printStackTrace();
        System.exit(-1);
    } finally {
        label = null;
        clickMessageLabel = null; dimension = null;
    }
    }
    /** 
     * Construct the GUI and display it.
     *  
     * @throws IOException 
     * @throws URISyntaxException
     */
    public static void main(String[] args) throws IOException, URISyntaxException {
    BufferedImage image = null;
    ApsrtcOprsJNLP app = new ApsrtcOprsJNLP();
    try {
        image = ImageIO.read(app.getClass().getResource("/logo.png"));
        app.setPreferredSize(new Dimension(image.getWidth(null), image.getHeight(null)));
    } catch (IOException e) {
        e.printStackTrace();
    }
    app.setIconImage(image);
    app.setVisible(true);
    }
}

JNLP:

<?xml version="1.0" encoding="UTF-8" ?>
<jnlp spec="1.0+"
      href="http://localhost:9999/apsrtc-oprs-jnlp/launch-app.jnlp">
  <information>
    <title>APSRTC-OPRS</title>
    <vendor>APSRTC</vendor>
    <description kind="one-line">
      APSRTC-OPRS WEB START
    </description>
    <icon kind="shortcut" href="logo.png" width="128" height="128"/>
    <shortcut online="false">
      <desktop/>
    </shortcut>
  </information>
  <resources>
    <j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se" />
    <jar href="http://localhost:9999/apsrtc-oprs-jnlp/oprs-jnlp.jar" main="true" />
    <applet-desc
       name='apsrtc-oprs-jnlp'
       main-class='com.abhibus.oprs.ApsrtcOprsJNLP'
       width="800"
       height="800">
   </applet-desc>
  </resources>
 <application-desc main-class="com.abhibus.oprs.ApsrtcOprsJNLP"/>
</jnlp>

由于

1 个答案:

答案 0 :(得分:1)

调用pack()会将大小更改为适合放置在该窗口中的UI内容所需的最小值。如果我们删除此行,则维度应保留在您设置的位置。

private void launchApplication() {
    /* other code omitted */
    panel.setBorder(new EmptyBorder(8, 8, 8, 8));
    setSize(dimension);
    setResizable(false);
    getContentPane().add(panel);        
    //pack();
}