2

現在、コンパイルエラーはなく、値は表示されず、「number:」というメッセージのみが表示されます。以前は「number:NULL」と表示されていたという例外があるため、既にここにいますが、そこに到達していると思います...おかげでみんな。私は約1週間スレッドを読んでいますが、今夜はあなたのアドバイスでより多くのことを学びました

ログインクラス

public class Login_JPanel extends JPanel
{
    JLabel welcomeMessage,
    mainPicture;

    JButton playerregistrationJB = new JButton ( "Player Registration" );   

    JLabel userAccountNumberJLabel  = new JLabel("<HTML><CENTER><FONT SIZE=6 
    COLOR=YELLOW>Please, enter your account number below and then click on player
    registration to continue </COLOR></CENTER></HTML>");

    JTextField useraccountnumberJTF  = new JTextField();

    public Login_JPanel()
    {   
        //========================================================
        //SET UP USERNAME JLABEL AND TEXT FIELD
        //========================================================
        add(userAccountNumberJLabel);
        userAccountNumberJLabel.setBounds( 322, 335, 300, 155 );

        add(useraccountnumberJTF);
        useraccountnumberJTF.setBounds (330, 500,  90, 25 ); 

        playerregistrationJB.setBounds( 350, 600, 325, 75 );
        playerregistrationJB.setFont( new Font( "Broadway", Font.BOLD, 30 ) );
        playerregistrationJB.setForeground( Color.red );
        playerregistrationJB.setBackground( Color.YELLOW );
        add( playerregistrationJB);         

        add( welcomeMessage = new JLabel( "Welcome!!" ) );
        welcomeMessage.setBounds(0,0,50,23);

        add( mainPicture = new JLabel( new ImageIcon("henkidama.jpg") ) );
        mainPicture.setBounds(0,0,50,50);

        setLayout(null);
        setBounds(0,0,1000,800);    
    }   
}

これはプレイヤー登録パネルです

public class PlayerRegistration_JPanel extends JPanel
{

    Login_JPanel loginJP = new Login_JPanel();

    JLabel welcomeMessage,
    mainPicture;

    JLabel useraccountnumberJL = new JLabel();

    JButton submitJB = new JButton ( "Submit" );    

    public PlayerRegistration_JPanel()
    {
        add(useraccountnumberJL);
        useraccountnumberJL.setText("number: " +  
                       loginJP.useraccountnumberJTF.getText());    
        useraccountnumberJL.setBounds( 100, 75, 625, 200 );
        useraccountnumberJL.setFont( new Font( "Broadway", Font.BOLD, 18 ) );

        submitJB.setBounds( 350, 600, 325, 75 );
        submitJB.setFont( new Font( "Broadway", Font.BOLD, 30 ) );
        submitJB.setForeground( Color.red );
        submitJB.setBackground( Color.YELLOW );
        add( submitJB); 

        add( welcomeMessage = new JLabel( "Welcome to Building Another Panel!!" ) );
        welcomeMessage.setBounds(0,0,50,23);

        add( mainPicture = new JLabel( new ImageIcon("henkidama.jpg") ) );
        mainPicture.setBounds(0,0,50,50);

        setLayout(null);
        setBounds(0,0,1000,800);        
    }   
}

JLabelユーザーに数字を入力するように求めるメッセージが表示され、ここまではでStringあり、ユーザーは をクリックするplayerregistrationJBと、 に数字が表示されますPlayerRegistration_JPanel。また、ProccessedJPanelすべてのボタンを で呼び出す場所と、1 つのフレームにメインを配置ActionListenerする場所があります。finalJpanelJTextFieldはグローバルであるため、どこに問題があるのか​​ わかりません(ただし、JavaにはGLOBAL VARIABLEのようなものはありません)。

4

5 に答える 5

4

useraccountnumberJTFクラスで宣言していませんPlayerRegistration_JPanel(クラスでのみ宣言されLogin_JPanelています) が、この行で呼び出しています。これはあなたのエラーです。

于 2012-04-27T05:35:27.973 に答える
3

あなたの はどこですかuseraccountnumberJTF。別のクラスで宣言しています。他のクラス プロパティにアクセスするには、クラス内に他のクラスのオブジェクトを作成してから、他のクラス プロパティにアクセスする必要があります。また、両方のクラスが同じパッケージに含まれている必要があります。

public class PlayerRegistration_JPanel extends JPanel
{
     Login_JPanel login = new Login_JPanel();
     public PlayerRegistration_JPanel() 
     {
          add(useraccountnumberJL);
          useraccountnumberJL.setText(login.useraccountnumberJTF.getText());
          useraccountnumberJL.setBounds( 100, 75, 625, 200 );
          useraccountnumberJL.setFont( new Font( "Broadway", Font.BOLD, 18 ) );
      }
}
于 2012-04-27T05:52:44.043 に答える
2

あなたJTextField useraccountnumberJTFはグローバルではありません。これは、Login_JPanelクラスのメンバー変数です。Login_JPanelこれは、クラスのインスタンスごとにそのようなテキスト フィールドが 1 つあることを意味します。参照している分野をどのようにPlayerRegistration_JPanel知る必要がありますか?

そのフィールドへのアクセスが必要な場合はLogin_JPanel、 のコンストラクターで のインスタンスを渡し、PlayerRegistration_JPanelそのインスタンスにそのフィールドを要求します。

これはかなり基本的な OO の概念です。たとえば、このようないくつかのチュートリアルを読み直すことはおそらく良いことです

于 2012-04-27T05:37:07.440 に答える
2

useraccountnumberJTFセカンドクラスで直接使えると思う理由は?

2 つのクラスの変数を混合しています。あるクラスで定義された変数を、最初のクラスを参照せずに 2 番目のクラスで直接使用することはできません。2番目useraccountnumberJTFのクラスにはないので、そのクラスでエラーが発生します。できることは、この変数値を 2 番目のクラスに渡す方法を見つけることです。

于 2012-04-27T05:37:22.117 に答える
2

宣言する必要がありますuseraccountnumberJTF

import java.awt.Color;
import java.awt.Font;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Login_JPanel extends JPanel {
    JLabel welcomeMessage, mainPicture;

    JButton playerregistrationJB = new JButton("Player Registration");
    JLabel userAccountNumberJLabel = new JLabel("<HTML><CENTER><FONT SIZE=6 COLOR=YELLOW>Please, enter your account number below and then click on playerregistration to continue </COLOR></CENTER></HTML>");
    JTextField useraccountnumberJTF = new JTextField();

    public Login_JPanel() {
        // ========================================================
        // SET UP USERNAME JLABEL AND TEXT FIELD
        // ========================================================
        add(userAccountNumberJLabel);
        userAccountNumberJLabel.setBounds(322, 335, 300, 155);

        add(useraccountnumberJTF);
        useraccountnumberJTF.setBounds(330, 500, 90, 25);

        playerregistrationJB.setBounds(350, 600, 325, 75);
        playerregistrationJB.setFont(new Font("Broadway", Font.BOLD, 30));
        playerregistrationJB.setForeground(Color.red);
        playerregistrationJB.setBackground(Color.YELLOW);
        add(playerregistrationJB);

        add(welcomeMessage = new JLabel("Welcome!!"));
        welcomeMessage.setBounds(0, 0, 50, 23);

        add(mainPicture = new JLabel(new ImageIcon("henkidama.jpg")));
        mainPicture.setBounds(0, 0, 50, 50);

        setLayout(null);
        setBounds(0, 0, 1000, 800);
    }

    public String getUseraccountnumberJTFText() {
        return useraccountnumberJTF.getText();
    }
}

PlayerRegistration_JPanel:

import java.awt.Color;
import java.awt.Font;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class PlayerRegistration_JPanel extends JPanel
{
    JLabel welcomeMessage,
           mainPicture;
    JLabel useraccountnumberJL = new JLabel();
    JButton submitJB = new JButton ( "Submit" );    

    public PlayerRegistration_JPanel(Login_JPanel panel)
    {
        add(useraccountnumberJL);
        useraccountnumberJL.setText(panel.getUseraccountnumberJTFText());
        useraccountnumberJL.setBounds( 100, 75, 625, 200 );
        useraccountnumberJL.setFont( new Font( "Broadway", Font.BOLD, 18 ) );

        submitJB.setBounds( 350, 600, 325, 75 );
        submitJB.setFont( new Font( "Broadway", Font.BOLD, 30 ) );
        submitJB.setForeground( Color.red );
        submitJB.setBackground( Color.YELLOW );
        add( submitJB); 

        add( welcomeMessage = new JLabel( "Welcome to Building Another Panel!!" ) );
        welcomeMessage.setBounds(0,0,50,23);

        add( mainPicture = new JLabel( new ImageIcon("henkidama.jpg") ) );
        mainPicture.setBounds(0,0,50,50);

        setLayout(null);
        setBounds(0,0,1000,800);
    }   
}

そして、これを読んでください:http://java.about.com/od/javasyntax/a/nameconventions.htm

編集:

クラスの宣言は次のようにする必要があります。

private Login_JPanel loginPanel;

private void theMethodWhoDeclareLoginJPanel() {
    loginPanel = new Login_JPanel();
}

private void theMethodWhoDeclarePlayerRegistrationJPanel() {
    new PlayerRegistration_JPanel(loginPanel);
}
于 2012-04-27T05:43:31.273 に答える