私は Java Swing の初心者で、問題があります。
この画像のようなものからインスピレーションを得て、ログイン ウィンドウを作成する必要があります (このようなものです。ウィンドウには、ユーザーがユーザー名とパスワードを挿入する 2 つのテキスト フィールドと、ログイン操作を実行するためのボタンを表示する必要があります)。
わかりました、これは非常に単純だと思います。それを行う次のクラスを実現しました。
package com.techub.crystalice.gui.login;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import org.jdesktop.application.SingleFrameApplication;
import com.techub.crystalice.gui.Constants;
import com.techub.crystalice.gui.GUI;
public class LoginFrame extends SingleFrameApplication {
@Override
protected void startup() {
// TODO Auto-generated method stub
System.out.println("DENTRO: LoginFrame() ---> startup()");
this.getMainFrame().setTitle("MyApp Login");
//this.getMainFrame().setSize(600, 350); // Setta le dimensioni del JFrame che rappresenta la finestra principale
this.getMainFrame().pack();
Container mainContainer = this.getMainFrame().getContentPane(); // Recupera l'oggetto Container del JFrame
// Imposta un layput manager di tipo GridLayout per il contenitore principale: 3 righe ed una singola colonna:
mainContainer.setLayout(new GridLayout(3,1));
// Contenitore rappresentato da 6 righe a singola colonna contenente i campi testuali e di input del login:
JPanel body = new JPanel();
body.setLayout(new GridLayout(5, 1));
JPanel usernNameLabelPabel = new JPanel();
usernNameLabelPabel.add(new JLabel("Username"));
body.add(usernNameLabelPabel);
JPanel userNameTextPanel = new JPanel();
JTextField userName = new JTextField();
userNameTextPanel.add(userName);
body.add(userNameTextPanel);
JPanel passwordLabelPanel = new JPanel();
passwordLabelPanel.add(new JLabel("Password"));
body.add(passwordLabelPanel);
JPanel passwordTextPanel = new JPanel();
JTextField password = new JTextField();
passwordTextPanel.add(password);
body.add(passwordTextPanel);
this.getMainFrame().add(body); // Aggiunge al JFrame principale il JPanel contenente il form di login
show(this.getMainFrame());
JPanel footer = new JPanel();
footer.setLayout(new FlowLayout(FlowLayout.CENTER));
JButton loginButton = new JButton("Login");
footer.add(loginButton);
this.getMainFrame().add(footer); // Aggiunge al JFrame principale il JPanel contenente il bottone di login
}
public static void main(String[] args) {
System.out.println("DENTRO: LoginFrame() ---> main()");
launch(LoginFrame.class, args);
}
}
このクラスは、startup() メソッドの定義を含む JDesktop という小さなフレームワークを使用しますが、これは純粋な Swing コードです。唯一言えることは、次のコード行でメインの *JFrame * を取得するということです。
this.getMainFrame()
この例はうまく機能していないように見えます。実際には、ログイン フォームの視覚化に美学上の問題があり、次の結果が得られるためです。
ご覧のとおり、多くのエラーが表示されます。
- JLabel と JTextField は互いに垂直方向に圧縮されます
- 前の例では、要素が中央に配置され、左側に配置されていません。
- JTextField が短すぎる
これらの問題を解決するにはどうすればよいですか?