0

これはおそらくかなりばかげた問題ですが、私は gridbag レイアウトをいじっていて、ユーザー情報を mysql DB でチェックする別のクラスに送信する基本的なログイン画面を作成しようとしています。しかし、それを行う前に、ログイン ボタンが押されたことをリッスンし、テキスト フィールドからテキストを取得する方法を見つける必要があります (この最後の部分で問題が発生しています)。addComponentsToPane メソッドの外で JTextField を宣言しようとしましたが、役に立ちませんでした。

ここに私のコードがあります

また、私はこのサイトに不慣れで、コードを正しくフォーマットするのに十分な知識がありません。

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package GUI;

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


/**
 *
 * @author TeslaSolari
 */
public class login {

    public void login() {
        createAndShowGUI();
    }

    private static void createAndShowGUI() {
        //Create and setup the windows
        JFrame frame = new JFrame("Login");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Setup the content pane
        addComponentsToPane(frame.getContentPane());

        //Display the window
        frame.pack();
        frame.setVisible(true);
    }

    public static void addComponentsToPane(Container pane) {
        pane.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);

        //parts
        JButton login;
        JTextField user;
        JLabel[] label = new JLabel[10];
        JPasswordField pass;
        ActionListener loginB = null;

        pane.setLayout(new GridBagLayout());
        //Cpnstraints
        GridBagConstraints c = new GridBagConstraints();
        c.fill = GridBagConstraints.CENTER;

        // Buttons
        login = new JButton("Login");
        c.weightx = 0.5;
        c.fill = GridBagConstraints.HORIZONTAL;
        c.gridx = 0;
        c.gridy = 4;
        pane.add(login, c);
        login.addActionListener(new Action());

        // textfields / labels
        label[0] = new JLabel("Username");
        user = new JTextField();
        c.weightx = 0.5;
        c.gridx = 0;
        c.gridy = 0;
        pane.add(label[0], c);
        c.weightx = 0.5;
        c.gridx = 0;
        c.gridy = 1;
        pane.add(user, c);

        label[1] = new JLabel("Password");
        pass = new JPasswordField();
        c.weightx = 0.5;
        c.gridx = 0;
        c.gridy = 2;
        pane.add(label[1], c);
        c.weightx = 0.5;
        c.gridx = 0;
        c.gridy = 3;
        pane.add(pass, c);


    }

    //Actions

    static class Action implements ActionListener{
        public void actionPerformed (ActionEvent e){
            System.out.println(label[]);
        }
    }

}
4

1 に答える 1

1

あなたの解決策は正しいようです(宣言 JTextField 宣言をメソッドの外に移動します)が、それらを静的として宣言し忘れた可能性があります(クラスの残りの部分によると)

private static JTextField user;
private static JPasswordField pass;
于 2012-07-22T23:50:58.183 に答える