1

と があるJFrametextfieldありbuttonます。プログラムの開始時に表示され、ボタンをクリックすると表示されなくなり、テキストフィールドのテキストが別のクラスに送信されます。しかし、何も送信せず、ボタンをクリックするとIDEはデバッグモードになります。

public class JframeFoo extends JFrame {

    private String username = new String();

    public JframeFoo() {
        // --------------------------------------------------------------
        // Making Frame for login

        final JTextField usernameFiled = new JTextField();
        this.add(usernameFiled);

        JButton signinButton = new JButton();
        // ------------------------------------------------------------

        signinButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                username = usernameFiled.getText();
                setVisible(false);
                Main.mainpage.setVisible(true);

            }
        });
        // --------------------------------------------------------------------------

    }

    public String getuserName() {
        return this.username;
    }
}

私の別のクラスは Jframe を呼び出します:

System.out.println(JframeFoo.getusername);
4

1 に答える 1

3

複数の JFrames がユーザーに飛び出すことは優れたユーザー インターフェイス設計ではないことをしばらく無視します。1 つのオブジェクトが別のオブジェクトと通信するには、他のオブジェクトへの有効な参照が必要です。(娘に邪魔されてごめんなさい)。

したがって、一方の JFrame クラスが他方から情報を取得するには、テキストを取得する最初のオブジェクトへの参照が必要であり、コンストラクターやセッター メソッドなどでその参照を渡すことはありません。

たとえば、Class1 のオブジェクトが Class2 のオブジェクトが必要とする情報を持っている場合、それを渡す 1 つの方法は、Class2 に Class1 の有効なインスタンスへの参照を与え、次に Class2 に Class1 インスタンスから情報を取得させることです。例えば、

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;

import javax.swing.*;

public class ClassMain {

   private static void createAndShowGui() {
      ClassMain mainPanel = new ClassMain();

      JFrame frame = new Class1();
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

class Class1 extends JFrame {
   private JTextField textfield = new JTextField(10);

   public Class1() {
      JPanel contentPane = (JPanel) getContentPane();
      contentPane.setLayout(new FlowLayout());
      add(textfield);
      add(new JButton(new AbstractAction("Open Window") {

         @Override
         public void actionPerformed(ActionEvent arg0) {
            Class2 class2 = new Class2(Class1.this);
            Class1.this.setVisible(false);
            class2.pack();
            class2.setVisible(true);
            class2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         }
      }));
   }

   public String getTextfieldText() {
      return textfield.getText();
   }
}

class Class2 extends JFrame {
   private Class1 class1;
   private JLabel label = new JLabel("");

   public Class2(Class1 class1) {
      this.class1 = class1;
      label.setText(class1.getTextfieldText());
      add(label);
   }


}
于 2013-07-30T13:55:50.327 に答える