回答編集履歴

4

package 削除

2022/11/16 07:36

投稿

jimbe
jimbe

スコア12648

test CHANGED
@@ -5,8 +5,6 @@
5
5
  ---
6
6
  GridBagLayout を使って想像でボタンまで配置してみました。
7
7
  ```java
8
- package teratail_java.q_36ah9jp69k5i02;
9
-
10
8
  import java.awt.*;
11
9
 
12
10
  import javax.swing.*;

3

コード追加

2022/11/16 07:35

投稿

jimbe
jimbe

スコア12648

test CHANGED
@@ -1,3 +1,90 @@
1
1
  Login クラスのコンストラクタで、ロゴは ```this.add(logo, BorderLayout.NORTH);``` としていますが、JTextField や JPasswordField が add されているパネル = info を this に add している個所が見当たりません。
2
2
 
3
3
  ```info.add(pw); ``` の後に ```this.add(info, BorderLayout.CENTER);``` としてみては如何でしょう。
4
+
5
+ ---
6
+ GridBagLayout を使って想像でボタンまで配置してみました。
7
+ ```java
8
+ package teratail_java.q_36ah9jp69k5i02;
9
+
10
+ import java.awt.*;
11
+
12
+ import javax.swing.*;
13
+
14
+ public class Test2Frame extends JFrame {
15
+ public static void main(String[] args) {
16
+ SwingUtilities.invokeLater(()-> new Test2Frame().setVisible(true));
17
+ }
18
+
19
+ public Test2Frame() {
20
+ super("ログイン画面");
21
+ this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
22
+ //this.setSize(800,500);
23
+
24
+ add(new LoginPanel());
25
+ pack();
26
+ }
27
+
28
+ private static class LoginPanel extends JPanel {
29
+ LoginPanel() {
30
+ super(new GridBagLayout());
31
+ setBorder(BorderFactory.createEmptyBorder(0,0,20,0));
32
+
33
+ GridBagConstraints gbc = new GridBagConstraints();
34
+
35
+ //ロゴ
36
+ gbc.gridx = 0;
37
+ gbc.gridy = 0;
38
+ gbc.gridwidth = 2; //幅2つを使う
39
+ add(new JLabel(new ImageIcon("./res/main.png")), gbc);
40
+ //空白
41
+ gbc.gridy ++;
42
+ gbc.gridwidth = 1; //幅1つを使う
43
+ add(Box.createVerticalStrut(20), gbc);
44
+ //1
45
+ gbc.gridx = 0;
46
+ gbc.gridy ++;
47
+ gbc.weightx = 1; //コンテナが広い時の空白の分配率
48
+ gbc.anchor = GridBagConstraints.EAST; //右詰め
49
+ gbc.insets = new Insets(0, 0, 0, 10); //余白
50
+ add(new JLabel("ID"), gbc);
51
+ //2
52
+ gbc.gridx ++;
53
+ JTextField idField = new JTextField("", 10);
54
+ gbc.anchor = GridBagConstraints.WEST; //左詰め
55
+ gbc.insets = new Insets(0, 0, 0, 0); //余白指定無し(デフォルト)
56
+ add(idField, gbc);
57
+ //空白
58
+ gbc.gridy ++;
59
+ add(Box.createVerticalStrut(10), gbc);
60
+ //3
61
+ gbc.gridx = 0;
62
+ gbc.gridy ++;
63
+ gbc.anchor = GridBagConstraints.EAST; //右詰め
64
+ gbc.insets = new Insets(0, 0, 0, 10); //余白
65
+ add(new JLabel("PASSWORD"), gbc);
66
+ //4
67
+ gbc.gridx ++;
68
+ gbc.anchor = GridBagConstraints.WEST; //左詰め
69
+ gbc.insets = new Insets(0, 0, 0, 0); //余白指定無し
70
+ JPasswordField passwordField = new JPasswordField("",10);
71
+ add(passwordField, gbc);
72
+ //空白
73
+ gbc.gridy ++;
74
+ add(Box.createVerticalStrut(20), gbc);
75
+ //5
76
+ gbc.gridx = 0;
77
+ gbc.gridy ++;
78
+ gbc.anchor = GridBagConstraints.CENTER; //中央(デフォルト)
79
+ JButton cancelButton = new JButton("CANCEL");
80
+ add(cancelButton, gbc);
81
+
82
+ gbc.gridx ++;
83
+ JButton loginButton = new JButton("LOGIN");
84
+ add(loginButton, gbc);
85
+ }
86
+ }
87
+ }
88
+ ```
89
+ ![実行スクリーンショット](https://ddjkaamml8q8x.cloudfront.net/questions/2022-11-16/f5016cbc-b907-4408-ab28-0486ffa97937.png)
90
+ (ロゴ画像は質問の画像から切り取っているので大きさが違うかもしれません。)

2

追記

2022/11/15 10:15

投稿

jimbe
jimbe

スコア12648

test CHANGED
@@ -1 +1,3 @@
1
1
  Login クラスのコンストラクタで、ロゴは ```this.add(logo, BorderLayout.NORTH);``` としていますが、JTextField や JPasswordField が add されているパネル = info を this に add している個所が見当たりません。
2
+
3
+ ```info.add(pw); ``` の後に ```this.add(info, BorderLayout.CENTER);``` としてみては如何でしょう。

1

修正

2022/11/15 09:56

投稿

jimbe
jimbe

スコア12648

test CHANGED
@@ -1 +1 @@
1
- info Login に add していないのでは
1
+ Login クラスのコンストラクタで、ロゴは ```this.add(logo, BorderLayout.NORTH);``` としていますが、JTextField や JPasswordField が add されているパネル = info を this に add している個所が見当たりません