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

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

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

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

Swing

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

Q&A

解決済

1回答

309閲覧

GridBagLayoutの使い方・考え方が分からない

perfectibility

総合スコア46

Java

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

Swing

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

0グッド

0クリップ

投稿2024/01/10 18:13

実現したいこと

GridBagLayoutを理解して自由自在に作りたい。

発生している問題・分からないこと

このYahoo知恵袋の回答として出されているコードの23~26行目の意味が理解できません。
なので分かり易く解説していただけないでしょうか !

該当のソースコード

Java

1import javax.swing.JFrame; 2import javax.swing.JPanel; 3import javax.swing.SwingUtilities; 4import javax.swing.border.EmptyBorder; 5import java.awt.GridBagLayout; 6import java.awt.GridBagConstraints; 7import java.awt.Color; 8 9public class GridBagLayoutTest extends JFrame { 10 private JPanel contentPane; 11 12 public static void main(String[] args){ 13 SwingUtilities.invokeLater(() -> new GridBagLayoutTest().setVisible(true)); 14 } 15 16 public GridBagLayoutTest(){ 17 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 18 setBounds(100, 100, 450, 300); 19 contentPane = new JPanel(); 20 contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 21 setContentPane(contentPane); 22 GridBagLayout gbl_contentPane = new GridBagLayout(); 23 gbl_contentPane.columnWidths = new int[]{0, 100, 0}; 24 gbl_contentPane.rowHeights = new int[]{50, 0, 0}; 25 gbl_contentPane.columnWeights = new double[]{1.0, 0.0, Double.MIN_VALUE}; 26 gbl_contentPane.rowWeights = new double[]{0.0, 1.0, Double.MIN_VALUE}; 27 contentPane.setLayout(gbl_contentPane); 28 29 JPanel panelPink = new JPanel(); 30 panelPink.setBackground(Color.PINK); 31 GridBagConstraints gbc_panelPink = new GridBagConstraints(); 32 gbc_panelPink.fill = GridBagConstraints.BOTH; 33 gbc_panelPink.gridx = 0; 34 gbc_panelPink.gridy = 0; 35 contentPane.add(panelPink, gbc_panelPink); 36 37 JPanel panelGreen = new JPanel(); 38 panelGreen.setBackground(Color.GREEN); 39 GridBagConstraints gbc_panelGreen = new GridBagConstraints(); 40 gbc_panelGreen.fill = GridBagConstraints.BOTH; 41 gbc_panelGreen.gridx = 1; 42 gbc_panelGreen.gridy = 0; 43 contentPane.add(panelGreen, gbc_panelGreen); 44 45 JPanel panelBlue = new JPanel(); 46 panelBlue.setBackground(Color.BLUE); 47 GridBagConstraints gbc_panelBlue = new GridBagConstraints(); 48 gbc_panelBlue.gridwidth = 2; 49 gbc_panelBlue.fill = GridBagConstraints.BOTH; 50 gbc_panelBlue.gridx = 0; 51 gbc_panelBlue.gridy = 1; 52 contentPane.add(panelBlue, gbc_panelBlue); 53 } 54} 55// express_thorium_9 q14131773874

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

色々と調べてみたのですがいまいち理解できなくて、重み付けなのは分かったのですがどういう理由でこの数値にしたのかが分かりませんでした

補足

特になし

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

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

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

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

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

guest

回答1

0

ベストアンサー

重み付けなのは分かった

ということは weight の方でしょうか。
何故パネルは縦横 2 グリッドしか使わないのに 3 要素の配列を指定しているのかは分からないですが…。
column は横、 row は縦です。従って、x0 の横方向と y1 の縦方向に weight が指定されていることになります。
weight は、縦横各々で 0 以外の値の合計との割合で余白を各グリッドに割り当てるものです。
縦横とも weight の合計は 1 で、それは x0 と y1 のみですから、それぞれの全ての余白が割当てされます。
パネルでいうとピンクとブルーが x0 で、ブルーだけが y1 ですので、ピンクは横が可変となり、ブルーは縦横共に可変となります。

weight は割合ですので、数値そのものは何でなければならないとかは決まっていません。
質問のコードのように1つだけ指定するのならそれこそ 0 で無ければ何でも良いですし、もし 2 つのグリッドで 30% と 70% で割り当てるなら、 0.3 と 0.7 でも 30 と 70 でも、 21 と 49 でも良いのです。

余分な領域の配分方法を設定する

個人的には、 GridBagLayout 自体にサイズやウエイトを設定するよりも GridBagConstraints でやったほうが自由度も高くて分かり易いと思います。

投稿2024/01/10 19:20

編集2024/01/10 19:40
jimbe

総合スコア12648

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

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

perfectibility

2024/01/11 01:38

ということは、 columnWeightsとrowWeightsはGridBagConstraintsでのweightxとweightyを列・行別で一括で設定しているのと同じってことでしょうか?
jimbe

2024/01/11 02:48 編集

あ、そういうことでしたか。 その通りです。
jimbe

2024/01/11 17:36

ちなみに GridBagLayout の columnWeights/rowWeights と GridBagConstraints の weightx/weighty を同時に使用すると、試した所ではグリッド毎で大きい値のほうが使われるようです。
perfectibility

2024/01/12 11:28

試してみた追加情報までありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問