当JLabel被改变时,Applet重新定位



我目前有一个包含AppletJTabbedPaneJFrame。每当在选项卡窗格上更新JLabel时,小程序就会向下移动一个像素,这比您想象的更令人讨厌。我能做些什么来防止这种情况发生吗?

这是我正在使用的一个例子(对于我的问题,只需将鼠标悬停在"Foo"上)[它需要大约10-15秒来启动applet &音乐一旦开始就会播放,按钮会禁用它[/p>

import java.io.*;
import java.net.*;
import java.awt.*;
import java.util.*;
import java.applet.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.regex.*;
public class ToolkitFrame extends JFrame {
    public void construct() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        add(getApplet(), BorderLayout.CENTER);
        add(getTabs(), BorderLayout.EAST);
        setLocationRelativeTo(null);
        pack();
        setVisible(true);
    }
    public JTabbedPane getTabs() {
        tabs = new JTabbedPane();
        tabs.add(getTab());
        return tabs;
    }
    public JPanel getTab() {
        label = new JLabel("Foo");
        label.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseEntered(MouseEvent event) {
                label.setText("Bar");
            }
            @Override
            public void mouseExited(MouseEvent event) {
                label.setText("Foo");
            }
        });
        JPanel panel = new JPanel();
        panel.add(label);
        return panel;
    }
    public Applet getApplet() {
        Applet applet = null;
        try {
            String url = "http://oldschool59.runescape.com/";
            String source = getPageSource(new URL(url));
            Matcher matcher = Pattern.compile("code=(.*) ").matcher(source);
            if (matcher.find()) {
                LoaderStub stub = new LoaderStub(Pattern.compile("<param name="([^\s]+)"\s+value="([^>]*)">"), source);
                String appletClass = matcher.group(1);
                stub.setCodeBase(new URL(url));
                stub.setDocumentBase(new URL(url));
                try {
                    applet = (Applet) new URLClassLoader(new URL[] {
                        new URL(url + "gamepack.jar")
                    }).loadClass(appletClass.replaceAll(".class", "")).newInstance();
                    applet.setBackground(Color.BLACK.darker());
                    applet.setPreferredSize(new Dimension(765, 503));
                    applet.setStub(stub);
                    applet.init();
                    applet.start();
                    applet.requestFocusInWindow();
                    return applet;
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        } catch (InterruptedException e1) {
            e1.printStackTrace();
        }
        return applet;
    }
    class LoaderStub implements AppletStub {
        private Map<String, String> parameters = new HashMap<String, String>();
        private URL documentBase;
        private URL codeBase;
        public LoaderStub(Pattern parameterPattern, String frameSource) {
            Matcher param = parameterPattern.matcher(frameSource);
            while (param.find()) {
                String key = param.group(1);
                String value = param.group(2);
                parameters.put(key, value);
            }
        }
        public void setDocumentBase(URL documentBase) {
            this.documentBase = documentBase;
        }
        public void setCodeBase(URL codeBase) {
            this.codeBase = codeBase;
        }
        @Override
        public boolean isActive() {
            return true;
        }
        @Override
        public URL getDocumentBase() {
            return documentBase;
        }
        @Override
        public URL getCodeBase() {
            return codeBase;
        }
        @Override
        public String getParameter(String name) {
            return parameters.get(name);
        }
        @Override
        public AppletContext getAppletContext() {
            return null;
        }
        @Override
        public void appletResize(int width, int height) {
        }
    }
    public static String getPageSource(URL url) throws IOException, InterruptedException {
        URLConnection uc = url.openConnection();
        uc.addRequestProperty("Accept", "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
        uc.addRequestProperty("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
        uc.addRequestProperty("Accept-Encoding", "gzip,deflate");
        uc.addRequestProperty("Accept-Language", "en-gb,en;q=0.5");
        uc.addRequestProperty("Connection", "keep-alive");
        uc.addRequestProperty("Host", "www.runescape.com");
        uc.addRequestProperty("Keep-Alive", "300");
        uc.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6");
        DataInputStream di = new DataInputStream(uc.getInputStream());
        byte[] tmp = new byte[uc.getContentLength()];
        di.readFully(tmp);
        di.close();
        return new String(tmp);
    }
    private JLabel label;
    private JTabbedPane tabs;
    private static final long serialVersionUID = -6757985823719418526L;
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new ToolkitFrame().construct();
            }
        });
    }
}
        applet.setLayout(null);
        applet.setBounds(0,0,770,530);

这将强制applet始终处于0,0的位置。只需在applt .start()

之前插入这段代码

最新更新