如何在框架中的元素之间添加间距/填充?所以文本区域更加明显和居中。
边框和填充。例如
和....相比:
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
主要在 GUI 中使用不同的构造函数为接受 2 个水平和垂直间距参数的布局提供“空白空间” 。
- 还添加了 2 个边框:
- 整个 GUI 周围的空白边框,以在它和框架装饰之间提供一些间距。
- 文本区域周围的标题边框,使其非常明显。
- 是否对原始代码的一个不必要的部分进行了更改。它不是扩展框架,而是简单地保留一个实例。
- 正如@Reimeus 所建议的那样,使用文本区域的
JScrollPane
容器。它为不需要滚动条的元素添加了一个漂亮的斜角边框。
- 专门创建一个
textAreaContainer
,以便我们可以设置一个带标题的边框来围绕滚动窗格 -而不会干扰其现有边框。
可以将 aCompoundBorder
用于由现有边框 ( scroll.getBorder()
) 和标题边框组成的滚动窗格。然而,按钮和其他元素可能会改变选择或操作的边界,这会变得复杂。因此,要为屏幕元素(如此处的文本区域)设置“最外层边框”——我通常更喜欢先将整个组件包装在另一个容器中。
- 不在 EDT 上创建和显示 GUI。应在 EDT 上创建和修改 Swing GUI。留给用户作为练习。有关更多详细信息,请参阅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);
}
}