7

学校では、JFrameを作成し、その1つのボタンと2つのテキストフィールド内に作成する必要がありました。テキストフィールド1に何を入力しても、ボタンが押されたときにテキストフィールド2に入る必要があります。プログラムを実行すると、テキストフィールドとボタンが表示されるようになるまでコードを取得しました。どういうわけかそうではありません。

私はここまで来ました:

package helloworld;

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

    public class HelloWorld extends JFrame {

        public static void main(String[] args) {

             JFrame frame = new HelloWorld();
             frame.setSize(400, 400);
             frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
             frame.setTitle("Hello World Button App");

             JPanel panel = new JPanel();
             frame.setContentPane(panel);
             fram.setVisible(true);
         }
       }

       class panel extends JPanel {

          public JButton btn1 = new JButton("Klick!");
          public JTextField txt1 = new JTextField(10);
          public JTextField txt2 = new JTextField(10);

          public panel() {
               add(btn1);
               add(txt1);
               add(txt2);
            }
          }

私はまだ画像を投稿することを許可されていませんが、ここに写真へのリンクを提供します

この質問がすでに存在する場合は申し訳ありませんが、同様の質問を見つけることができませんでした。私はプログラミングに不慣れなので、何かを忘れたり、何か間違ったことを書いたりしたときに、私に怒鳴らないでください!

4

3 に答える 3

7

ここで私はあなたのコードを少し変更しましたが、同様の方法で行いました。JFrame何かクリエイティブなことをしたくないまでは延長しませんが、いつでもできます。

あなたはすでに拡張JFrameしているので、メソッドを呼び出す価値はありませんがframe.foo() 、単純foo()に、そして最も重要なJFrame frame = new HelloWorld()のは、クラスをJFrame次のように拡張している場合は意味がありません。

ここに画像の説明を入力してください

import javax.swing.*;

public class HelloWorld extends JFrame{

 public static void main(String[] args) {

          SwingUtilities.invokeLater(new Runnable() {
          public void run() {
          new HelloWorld().setVisible(true);
        }
    });

     }
    public  HelloWorld()
    {

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("Hello World Button App");

        panel pan= new panel();
        add(pan.panel);
        pack();
        setVisible(true);
    }
   }

   class panel {

      private JButton btn1 = new JButton("Klick!");
      private JTextField txt1 = new JTextField(10);
      private JTextField txt2 = new JTextField(10);
      JPanel panel;
      public panel() {
           panel = new JPanel();
           panel.add(btn1);
           panel.add(txt1);
           panel.add(txt2);
        }
      }

また、次のコマンドでpanelクラスを拡張することもできJPanel ます。

 public  HelloWorld()
    {

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("Hello World Button App");

          panel pan= new panel();
         add(pan);
         pack();
         setVisible(true);
    }
   }

   class panel extends JPanel {

      private JButton btn1 = new JButton("Klick!");
      private JTextField txt1 = new JTextField(10);
      private JTextField txt2 = new JTextField(10);

      public panel() {

           add(btn1);
           add(txt1);
           add(txt2);
        }
      }
于 2013-02-03T14:16:34.167 に答える
4

panelどこでも使用していないというクラスを宣言しました。行bwlowを置き換えてください:

JPanel panel = new JPanel();

と:

SomePanel panel = new SomePanel();

そうすると、クラスは正しいクラスの命名に従うようにpanelなります。SomePanel

あなたを助けるためのいくつかの考え:

  • Javaスタイルに従ってクラスに名前を付けます
  • パブリックフィールドは使用しないでください
  • パネルにレイアウトを設定します。今回は、デフォルトがであるため、機能しましたFlowLayout
于 2013-02-03T12:00:38.787 に答える
4

クラス名がpanelJPanelではないからです

これを変更します:

panel panel = new panel();
frame.setContentPane(panel);
frame.setVisible(true);

それほど混乱しないクラスの名前を使用し、大文字で宣言するようにしてください。

例:

Class Panel extends JPanel {}

物体:

Panel panel = new Panel()

ここでは、どれがクラス名で、どちらがそのクラスのオブジェクト(そのクラスのインスタンス)であるかを明確に読み取ることができます。

于 2013-02-03T12:01:15.097 に答える