0

Java Swing で動作するアプリケーションがありますが、アプレットに変換できないようです。基本的に、アプレットには 4 つのボタンが表示されます。そのうちの 1 つが画面をクリアしてから、新しいインターフェイスを描画する必要があります (もちろん、他のボタン用のものを追加しますが、ここで行き詰まりました)。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.JApplet; //import swing applet interface
import java.util.Hashtable;

public class TopMenu extends JApplet{ 

  private JPanel panel = new JPanel();

  public void init(){
            mainMenu(); 
  }

public void mainMenu() {

    // create buttons

    panel.setLayout(new GridLayout(2, 2));

    JButton collectButton = new JButton("Collect data");
    JButton uploadButton = new JButton("Upload");
    JButton downloadButton = new JButton("Download");
    JButton exploreButton = new JButton("Explore data");

    panel.add(collectButton);
    panel.add(uploadButton);
    panel.add(downloadButton);
    panel.add(exploreButton);

    collectButton.addActionListener(new ActionListener(  ) {
      public void actionPerformed(ActionEvent e) {
          int numberGFish = 400;
                //panel.removeAll();  
                        //panel.add(new JLabel("Just to test"), BorderLayout.CENTER);   
                        //panel.revalidate();   
                        //panel.repaint();   
            }
    });

    setContentPane(panel);

  }

}

ActionListener を追加するまで、すべてのコードはまったく問題なく動作します。その後、すべてが空白になります。コンパイルは問題ありませんが、サーバーでテストすると、最初のメニューすら表示されず、単なる空白のパネルです。私は ActionListener ビットに非常に平凡なものをたくさん入れて、それらに問題がないことを確認しようとしましたが、ご覧のとおり、そこに数値を宣言するだけでも機能しません。

もともと私は実際に別のメソッドでリスナービット呼び出しを行っていましたが、それが他のすべてを実行しましたが、それも機能しませんでした。おそらくそれが問題だと思ったので、それを破棄しました。

これはとても単純なことだと確信していますが、今では何時間もそれに没頭しており、テストするアイデアが本当に尽きてしまいました。と、アドバイス有難う御座いました。

4

2 に答える 2

2

それが問題になるかどうかはわかりませんが、すべての GUI コンポーネントはイベント ディスパッチ スレッドで作成する必要があります。

アプレットの作成方法に関する Swing チュートリアルの推奨コード構造は次のとおりです。

public void init() {
    //Execute a job on the event-dispatching thread:
    //creating this applet's GUI.
    try {
        javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
            public void run() {
                createGUI();
            }
        });
    } catch (Exception e) {
        System.err.println("createGUI didn't successfully complete");
    }
}

private void createGUI() {
    JLabel label = new JLabel(
                       "You are successfully running a Swing applet!");
    label.setHorizontalAlignment(JLabel.CENTER);
    label.setBorder(BorderFactory.createMatteBorder(1,1,1,1,Color.black));
    add(label, BorderLayout.CENTER);
}
于 2013-11-09T23:14:26.327 に答える
0

ばかげた質問だとはわかっていましたが、理解できませんでした。今並べました。

私はまったく馬鹿げていて、TopMenu$1.class ファイルをサーバーにコピーしていませんでした。何らかの理由で、このファイルがなくても動作しますが、ActionListener ビットが追加されていないと動作しません。だから私はそれが問題になるとは思っていませんでした。

どっ!皆さんありがとう。

于 2013-11-10T20:57:56.067 に答える