8

Eclipseを使用してJavaアプレットを作成します。IDEから実行するたびに、アプレットビューアが左上隅の(0,0)に表示されます。開発中にプログラムで画面の中央に変更するにはどうすればよいですか?ブラウザにデプロイするとき、htmlが場所を決定するため、アプレット内からウィンドウを変更することはできません。

4

2 に答える 2

7

他のポスターとは対照的に、これは無意味な演習であり、開発を容易にするためにハイブリッドアプリケーション/アプレットを作成するという彼らの提案を好むと思います。

OTOH-「私たちは技術を持っています」。アプレットビューアのアプレットの最上位コンテナは、通常、Windowです。それへの参照を取得し、あなたが望む場所にそれを設定することができます。

この(イライラする)小さな例を試してみてください。

// <applet code=CantCatchMe width=100 height=100></applet>
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Random;

public class CantCatchMe extends JApplet {

    Window window;
    Dimension screenSize;
    JPanel gui;
    Random r = new Random();

    public void init() {
        ActionListener al = new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                moveAppletViewer();
            }
        };
        gui = new JPanel();
        gui.setBackground(Color.YELLOW);
        add(gui);

        screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        // change 2000 (every 2 secs.) to 200 (5 times a second) for REALLY irritating!
        Timer timer = new Timer(2000, al);
        timer.start();
    }

    public void start() {
        Container c = gui.getParent();
        while (c.getParent()!=null) {
            c = c.getParent();
        }
        if (c instanceof Window) {
            window = (Window)c;
        } else {
            System.out.println(c);
        }
    }

    private void moveAppletViewer() {
        if (window!=null) {
            int x = r.nextInt((int)screenSize.getWidth());
            int y = r.nextInt((int)screenSize.getHeight());
            window.setLocation(x,y);
        }
    }
}
于 2012-05-16T02:33:42.190 に答える
2

興味深い質問です。

Windowsでスクリプトを使用してバッチファイルモードから起動することなく、AppletViewerに影響を与える信頼できる方法を見つけられませんでした。それでも、うまく機能しませんでした。

別の方法は、アプレットがJFrameで開始するようにテストコードを作成することです。これにより、簡単に中央に配置できます。

アプレットにメインメソッドを追加します。

 public class TheApplet extends JApplet {

   int width, height;

   public void init() {
      width = getSize().width;
      height = getSize().height;
      setBackground( Color.black );
   }

   public void paint( Graphics g ) {
      g.setColor( Color.orange );
      for ( int i = 0; i < 10; ++i ) {
         g.drawLine( width / 2, height / 2, i * width / 10, 0 );
      }
   }

    public static void main(String args[]) {
        TheApplet applet = new TheApplet();

        JFrame frame = new JFrame("Your Test Applet");
        frame.getContentPane().add(applet);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(640,480);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        applet.init();

    }
}

何かを見逃していない限り、これは機能するはずです-自分のマシンで実行している作業コードを更新しました。

于 2012-05-15T12:44:05.530 に答える