フレーム内の要素間に間隔/パディングを追加するにはどうすればよいですか? そのため、テキスト領域がより見やすく、中央に配置されます。
ボーダーとパディング。例えば
と比べて:

import javax.swing.*;
import java.awt.*;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;
public class Exercise226 {
private JButton jbSort;
private JButton jbReverse;
private JButton jbAdd;
private JButton jbShuffle;
private JLabel jlAddnum;
private JTextArea jTextDisplay;
private JTextField jTextAdd;
private JPanel gui;
public Exercise226() {
gui = new JPanel(new BorderLayout(5,5));
jbSort = new JButton("Sort");
jbReverse = new JButton("Reverse");
jbShuffle = new JButton("Shuffle");
jbAdd = new JButton("Add");
jlAddnum = new JLabel("Add number here: ");
// set the size constraints using columns/rows
jTextDisplay = new JTextArea("Here I am!", 6,20);
jTextAdd = new JTextField(8);
JPanel p1 = new JPanel(new GridLayout(1,3,3,3));
p1.add(jlAddnum);
p1.add(jTextAdd);
p1.add(jbAdd);
JPanel p2 = new JPanel(new GridLayout(1,3,3,3));
p2.add(jbSort);
p2.add(jbReverse);
p2.add(jbShuffle);
JPanel textAreaContainer = new JPanel(new GridLayout());
textAreaContainer.add(new JScrollPane(jTextDisplay));
textAreaContainer.setBorder(new TitledBorder("Text Area Here"));
gui.add(p1, BorderLayout.PAGE_START);
gui.add(textAreaContainer, BorderLayout.CENTER);
gui.add(p2, BorderLayout.PAGE_END);
gui.setBorder(new EmptyBorder(4,4,4,4));
}
public Container getGui() {
return gui;
}
public static void main(String... args) {
JFrame f = new JFrame();
Exercise226 gui = new Exercise226();
f.setContentPane(gui.getGui());
f.setTitle("Numbers");
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.pack();
f.setLocationByPlatform(true);
f.setVisible(true);
}
}
このコード:
int
主に、水平および垂直間隔の2 つの引数を受け入れるレイアウトのさまざまなコンストラクターを使用して、GUI に「空白」を提供します。
- また、2 つの境界線を追加します。
- GUI とフレームの装飾の間にスペースを確保するための、GUI 全体の周囲の空の境界線。
- 非常に明確にするために、テキスト領域の周りにタイトル付きの境界線を付けます。
- 元のコードの不要な部分の変更を実装します。フレームを拡張する代わりに、フレームのインスタンスを保持するだけです。
JScrollPane
@Reimeus で提案されているように、テキスト領域にコンテナーを使用します。スクロールバーを必要としない要素に、独自の素敵な斜めの境界線を追加します。
textAreaContainer
スクロール ペインを囲むようにタイトル付きの境界線を設定できるように、既存の境界線に干渉することなくを特別に作成します。既存の境界線 ( ) とタイトル付きの境界線で構成されるスクロール ペインに
を使用することができます。ただし、選択またはアクションの境界線を変更する可能性のあるボタンやその他の要素では複雑になります。したがって、画面要素 (ここではテキスト領域など) に「最外枠」を設定するには、通常、最初にコンポーネント全体を別のコンテナーにラップすることを好みます。CompoundBorder
scroll.getBorder()
- EDT で GUI を作成および表示しません。Swing GUI は、EDT 上で作成および変更する必要があります。ユーザーの演習として残します。詳細については、Swingでの同時実行を参照してください。
古いコード
上記の「比較GUIイメージ」を提供するこの回答の元のコード。IT は元のコードに密接に基づいていますが、テキスト領域がスクロール ペインにラップされ (そのため斜めの境界線が得られます)、表示するテキストが与えられています。

import javax.swing.*;
import java.awt.*;
public class Exercise226 extends JFrame {
private JButton jbSort;
private JButton jbReverse;
private JButton jbAdd;
private JButton jbShuffle;
private JLabel jlAddnum;
private JTextArea jTextDisplay;
private JTextField jTextAdd;
public Exercise226() {
jbSort = new JButton("Sort");
jbReverse = new JButton("Reverse");
jbShuffle = new JButton("Shuffle");
jbAdd = new JButton("Add");
jlAddnum = new JLabel("Add number here: ");
// set the size constraints using columns/rows
jTextDisplay = new JTextArea("Here I am!", 6,20);
jTextAdd = new JTextField(8);
setLayout(new BorderLayout());
JPanel p1 = new JPanel(new GridLayout(1,3));
p1.add(jlAddnum);
p1.add(jTextAdd);
p1.add(jbAdd);
JPanel p2 = new JPanel(new GridLayout(1,3));
p2.add(jbSort);
p2.add(jbReverse);
p2.add(jbShuffle);
add(p1, BorderLayout.NORTH);
add(new JScrollPane(jTextDisplay), BorderLayout.CENTER);
add(p2, BorderLayout.SOUTH);
}
public static void main(String... args) {
Exercise226 gui = new Exercise226();
gui.setTitle("Numbers");
gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//gui.setSize(300, 200);
gui.pack();
//gui.setLocationRelativeTo(null);
gui.setLocationByPlatform(true);
gui.setVisible(true);
}
}