質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

デザイン

プログラミングでのデザインとは、プログラムの構成や、使用の信頼性・持続性・正確性・利便性の目標達成にはどうするのがベストなのか特定の選択を行うことです。

Q&A

解決済

1回答

2908閲覧

JPanel内のコンポーネントの配置を調整したい

Jhon_McClane

総合スコア48

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

デザイン

プログラミングでのデザインとは、プログラムの構成や、使用の信頼性・持続性・正確性・利便性の目標達成にはどうするのがベストなのか特定の選択を行うことです。

1グッド

0クリップ

投稿2021/01/11 03:34

編集2021/01/11 05:10

前提・実現したいこと

イメージ説明
この領域を中央に置きたいです.
現在ログイン画面の作成をしており,まとまった形として写真のように中央にまとまったものをデザインとして考えています.サイズはフルスクリーンです.
レイアウトをいろいろ試してはいるのですが,思ったようにはいかず,またどれが適しているのか経験が浅いため分からないです.

赤い枠のパネルにラベル,入力のパネル,ボタンのパネルを真ん中に来るように指定しています.現在BorderLayot.NORTHでむりやり縮めていますが,BorderLayot.CENTERにするとばらけます.mainPanel.setPreferredSizeをやって領域を調整したりもしたのですが,効果がなく苦戦しています.
質問の途中ですがGroupLayoutを使うとうまくいけるのかなと。。。

該当のソースコード

import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Font; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; import javax.swing.border.LineBorder; public class MyPanel extends JPanel implements ActionListener { private static final int PASS_FIELD_SIZE = 30; private static final int TEXT_FIELD_SIZE = 30; private static final int FONT_SIZE = 50; private static final int TITLE_FONT_SIZE = 80; private JTextField userId; private JPasswordField password; private JButton checkBtn, newAcountBtn; private GridBagConstraints gbc; public MyPanel() { //setLayout(null); setLayout(new BorderLayout()); gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.HORIZONTAL; gbc.insets = new Insets(5, 10, 5, 10); //title JLabel labelTitle = createJL("ログイン"); //入力関連のパネル JPanel fieldPanel = new JPanel(new GridBagLayout()); fieldPanel.add(createJL("ID: ", 0, 0), gbc); userId = createTF(1, 0); fieldPanel.add(userId, gbc); fieldPanel.add(createJL("Password: ", 0, 1), gbc); password = createPF(1, 1); fieldPanel.add(password, gbc); //ボタン関連のパネル JPanel btnP = new JPanel(); newAcountBtn = createBtn("新規登録"); checkBtn = createBtn("check"); btnP.add(newAcountBtn); btnP.add(checkBtn); //パネルの統合及び位置サイズ調整 JPanel mainPanel = new JPanel(); mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS)); LineBorder border = new LineBorder(Color.RED, 10, true); mainPanel.setBorder(border); labelTitle.setAlignmentX(Component.CENTER_ALIGNMENT); fieldPanel.setAlignmentX(Component.CENTER_ALIGNMENT); btnP.setAlignmentX(Component.CENTER_ALIGNMENT); mainPanel.add(labelTitle); mainPanel.add(fieldPanel); mainPanel.add(btnP); add(mainPanel, BorderLayout.NORTH); } public void actionPerformed(ActionEvent e) { } public JButton createBtn(String str) { final int WIDTH = 250; final int HEIGHT = 70; JButton btn = new JButton(str); btn.setPreferredSize(new Dimension(WIDTH, HEIGHT)); btn.setFont(new Font("MS ゴシック", Font.BOLD, FONT_SIZE)); btn.addActionListener(this); return btn; } public JLabel createJL(String str) { JLabel label = new JLabel(str); label.setFont(new Font("MS ゴシック", Font.BOLD, TITLE_FONT_SIZE)); return label; } public JLabel createJL(String str, int x, int y) { JLabel label = new JLabel(str); label.setFont(new Font("MS ゴシック", Font.BOLD, FONT_SIZE)); gbc.gridx = x; gbc.gridy = y; return label; } public JTextField createTF(int x, int y) { JTextField tf = new JTextField(TEXT_FIELD_SIZE); tf.setFont(new Font("MS ゴシック", Font.BOLD, FONT_SIZE)); gbc.gridx = x; gbc.gridy = y; return tf; } public JPasswordField createPF(int x, int y) { JPasswordField pf = new JPasswordField(PASS_FIELD_SIZE); pf.setFont(new Font("MS ゴシック", Font.BOLD, FONT_SIZE)); gbc.gridx = x; gbc.gridy = y; return pf; } }
import java.awt.Dimension; import java.awt.Toolkit; import javax.swing.JFrame; public class MyFrame extends JFrame{ public static void main(String[] args) { new MyFrame(); } public MyFrame() { Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); setTitle("test"); setSize(screenSize.width, screenSize.height); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); MyPanel panel = new MyPanel(); add(panel); setLocationRelativeTo(null); setResizable(false); this.setVisible(true); } }

試したこと

もともと画面サイズに応じて計算後,setBoundsで配置を指定していたのですが,画面サイズによってフォントサイズが大きすぎるとコンポーネントが切れてしまい,この方法だと調整が大変なためやめました.

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

質問の途中ですがGroupLayoutを使うとうまくいけるのかなと。。。

そうですね。mainPanelのところだけですが、こんな感じでしょうか。

Java

1setLayout(new GridBagLayout()); 2gbc = new GridBagConstraints(); 3gbc.fill = GridBagConstraints.HORIZONTAL; 4gbc.weightx = 1.0; 5add(mainPanel, gbc);

これでもいいならすっきり書ける。

Java

1setLayout(new GridBagLayout()); 2add(mainPanel);

投稿2021/01/11 10:20

TN8001

総合スコア9862

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Jhon_McClane

2021/01/27 06:07

返信遅れまして、申し訳ございません。 こちらで質問をしていたのを失念しておりました。 このたびは回答してくださりありがとうございます。 実のところ、当初(質問をした時点)は画面の大きさをパソコンに依存させる形で設計していたのですが、他のコンポーネントの対応が画面の大きさによって調整することが難しかったため、setBoundsで作り替えました。 今回、回答してくださったもの(知識)に関しては今後の設計や開発に活かしたいと思います。 今後、このようなことが再び起こらぬよう、務めていきたいと思います。
TN8001

2021/01/27 08:20

そうですか。 自己回答でもいいですので、解決済みにしておいてください^^
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問