8

アプレットのサイズを変更した後にボタンが消える理由を知っているか、考えている人はいますか?

これは私のコードです:


import java.awt.event.*;
import javax.swing.*;
import acm.program.*;

public class button extends ConsoleProgram {

    public void init(){

        hiButton = new JButton("hi");
        add(hiButton, SOUTH);
        addActionListeners();


    }

    public   void actionPerformed(ActionEvent e){
        if(hiButton == e.getSource()){
           println("hello") ;
        }

    }
private JButton hiButton;


}

4

6 に答える 6

1

init-method を再定義するのが良いアイデアかどうかはわかりません。http://jtf.acm.org/javadoc/student/acm/program/ConsoleProgram.htmlを見ると、実行メソッドのみを実装していると思います。super.init() を呼び出さずに init をオーバーライドすると、奇妙に見えます。

アプレット プログラミングの最初のステップでは、JApplet から直接派生させたほうがよいかもしれません。

于 2013-01-12T20:14:55.427 に答える
0

init() メソッドの開始時に super.init() を呼び出してみましたか?

于 2013-01-18T01:09:50.153 に答える
0

コンソールのレイアウトを明示的に使用してから、相対位置を使用してみてください。

于 2013-02-16T23:36:11.600 に答える
0

仮定して

  • ConsoleProgram は (直接的または間接的に) JApplet を拡張します
  • SOUTH を値 BorderLayout.SOUTH を持つ static final 変数として宣言しました (そうしないと、コードはコンパイルされません)。

コードは機能するはずです。再描画する必要はありません (アプリケーション固有の最適化を行いたい場合を除く)。コードをコピーして貼り付けただけです (上記の 2 つの前提を明示することにより)。アプレットが表示され、サイズ変更時にボタンが消えません。

とにかく、コードには「良くない」ものはほとんどありません。

  1. まず、命名規則の問題です。クラス名は、最初の文字を大文字にした「ボタン」にする必要があります (その上、アプレットの名前としては不適切です)。
  2. 次に、コンポーネントを追加する前にアクション リスナーをアタッチする必要があります。
  3. 第 3 に、Oracle のドキュメントがここで示唆しているように、GUI を構築するコードは、イベント ディスパッチャ スレッドで実行されるジョブである必要があります。SwingUtilities.invokeAndWait(Runnable()
于 2013-01-03T21:36:28.603 に答える
-1

アプレットでボタンのサイズを変更するには:

public class Button extends JApplet implements ActionListener {

   private JButton button;

   public void init() {
      Container container = getContentPane();
      container.setLayout(null);
      container.setBackground(Color.white);
      button = new JButton("Press Me");
      button.setSize(getWidth()/2,20);
      button.setLocation(getWidth()/2-button.getSize().width/2, getHeight()/2-button.getSize().height/2);
      container.add(button);
      button.addActionListener(this);
   }

   public void actionPerformed(ActionEvent e) {
      int width = (button.getSize().width == getWidth()/2) ? getWidth()/4 : getWidth()/2;
      int height = button.getSize().height;
      button.setSize(width,height);
      button.setLocation(getWidth()/2-width/2, getHeight()/2-height/2);
   }
}

JFrame でボタンのサイズを変更するには:

public class Button extends JFrame implements ActionListener {
   private JButton button;

   public Button(String title) {
      Container container = getContentPane();
      container.setLayout(null);
      container.setBackground(Color.white);
      setTitle(title);
      setSize(400,400);
      button = new JButton("Press Me");
      button.setSize(getWidth()/2,20);
      button.setLocation(getWidth()/2-button.getSize().width/2,
                     getHeight()/2-button.getSize().height/2);
      container.add(button);
      button.addActionListener(this);
    }

   public void actionPerformed(ActionEvent e) {
      int width = (button.getSize().width == getWidth()/2) ? getWidth()/4 : getWidth()/2;
      int height = button.getSize().height;
      button.setSize(width,height);
      button.setLocation(getWidth()/2-width/2, getHeight()/2-height/2);
   }

   public static void main(String[] args) {
      Button button = new Button("Test");
      button.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      button.setVisible(true);
   }
}
于 2013-01-06T09:49:40.023 に答える
-2

再描画メソッドを宣言しましたか...???

スイングを使用しています。再描画を宣言する必要があります。

カスタム再描画方法を定義してください

于 2012-09-06T09:47:41.867 に答える