将 JTextArea 放在特定位置
Put a JTextArea in specific location
我想知道,如何将我的 JTextArea
放在程序中的一些按钮下方...为了向您展示我想如何订购它,我在 GUI 中做了一个示例.
图片示例:
基本上,我想把它们放在按钮上,就像示例中那样。
我尝试将 JPanel 作为 flowlayout,并添加 JTextArea,但不起作用。
您可以使用 BorderLayout 并将 JTextArea 添加到 Center,将按钮面板的布局设置为 FlowLayout 并将其添加到 North。如果您需要代码帮助,请告诉我。
这是一个示例,建议 BorderLayout
适合主面板。
为了尽可能接近您的示例,我在北面板添加了边距(空边框),并在按钮之间添加了水平支柱(使用 BoxLayout
北面板)。
JFrame frame = new JFrame();
JPanel contentPanel = new JPanel();
contentPanel.setLayout(new BorderLayout());
JPanel buttonsPanel = new JPanel();
buttonsPanel.setLayout(new BoxLayout(buttonsPanel, BoxLayout.X_AXIS));
buttonsPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
JButton b1 = new JButton("B1");
JButton b2 = new JButton("B2");
buttonsPanel.add(b1);
buttonsPanel.add(Box.createHorizontalStrut(5));
buttonsPanel.add(b2);
contentPanel.add(buttonsPanel, BorderLayout.NORTH);
contentPanel.add(new JTextArea(), BorderLayout.CENTER);
frame.setContentPane(contentPanel);
frame.setSize(400, 300);
frame.setVisible(true);
BorderLayout
和大多数其他布局管理器(例如 BoxLayout
或 GridBagLayout
)的问题在于它们以像素为单位设置组件之间的间隙。这不是可移植的,因为在不同的屏幕上布局会
看起来不一样。如果您在 19" 显示器上创建 UI,它不会显示
在 32" 显示器上表现不错。现在我们谈论的是 Java 应用程序,其中便携性是最重要的。
幸运的是,使用 GroupLayout
或 MigLayout
,我们可以创建真正便携的 UI。
package com.zetcode;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import net.miginfocom.swing.MigLayout;
public class MigLayoutTwoButtonsEx extends JFrame {
public MigLayoutTwoButtonsEx() {
initUI();
}
private void initUI() {
JButton btn1 = new JButton("B1");
JButton btn2 = new JButton("B2");
JTextArea area = new JTextArea(15, 28);
area.setBorder(BorderFactory.createEtchedBorder());
createLayout(btn1, btn2, area);
setTitle("MigLayout example");
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void createLayout(JComponent... arg) {
setLayout(new MigLayout("gap 5lp 7lp"));
add(arg[0], "split 2");
add(arg[1], "wrap");
add(arg[2], "push, grow, span");
pack();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
MigLayoutTwoButtonsEx ex = new MigLayoutTwoButtonsEx();
ex.setVisible(true);
});
}
}
这里是 MigLayout
经理的例子。
setLayout(new MigLayout("gap 5lp 7lp"));
我们使用逻辑像素来定义间隙。
截图:
我想知道,如何将我的 JTextArea
放在程序中的一些按钮下方...为了向您展示我想如何订购它,我在 GUI 中做了一个示例.
图片示例:
基本上,我想把它们放在按钮上,就像示例中那样。 我尝试将 JPanel 作为 flowlayout,并添加 JTextArea,但不起作用。
您可以使用 BorderLayout 并将 JTextArea 添加到 Center,将按钮面板的布局设置为 FlowLayout 并将其添加到 North。如果您需要代码帮助,请告诉我。
这是一个示例,建议 BorderLayout
适合主面板。
为了尽可能接近您的示例,我在北面板添加了边距(空边框),并在按钮之间添加了水平支柱(使用 BoxLayout
北面板)。
JFrame frame = new JFrame();
JPanel contentPanel = new JPanel();
contentPanel.setLayout(new BorderLayout());
JPanel buttonsPanel = new JPanel();
buttonsPanel.setLayout(new BoxLayout(buttonsPanel, BoxLayout.X_AXIS));
buttonsPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
JButton b1 = new JButton("B1");
JButton b2 = new JButton("B2");
buttonsPanel.add(b1);
buttonsPanel.add(Box.createHorizontalStrut(5));
buttonsPanel.add(b2);
contentPanel.add(buttonsPanel, BorderLayout.NORTH);
contentPanel.add(new JTextArea(), BorderLayout.CENTER);
frame.setContentPane(contentPanel);
frame.setSize(400, 300);
frame.setVisible(true);
BorderLayout
和大多数其他布局管理器(例如 BoxLayout
或 GridBagLayout
)的问题在于它们以像素为单位设置组件之间的间隙。这不是可移植的,因为在不同的屏幕上布局会
看起来不一样。如果您在 19" 显示器上创建 UI,它不会显示
在 32" 显示器上表现不错。现在我们谈论的是 Java 应用程序,其中便携性是最重要的。
幸运的是,使用 GroupLayout
或 MigLayout
,我们可以创建真正便携的 UI。
package com.zetcode;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import net.miginfocom.swing.MigLayout;
public class MigLayoutTwoButtonsEx extends JFrame {
public MigLayoutTwoButtonsEx() {
initUI();
}
private void initUI() {
JButton btn1 = new JButton("B1");
JButton btn2 = new JButton("B2");
JTextArea area = new JTextArea(15, 28);
area.setBorder(BorderFactory.createEtchedBorder());
createLayout(btn1, btn2, area);
setTitle("MigLayout example");
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void createLayout(JComponent... arg) {
setLayout(new MigLayout("gap 5lp 7lp"));
add(arg[0], "split 2");
add(arg[1], "wrap");
add(arg[2], "push, grow, span");
pack();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
MigLayoutTwoButtonsEx ex = new MigLayoutTwoButtonsEx();
ex.setVisible(true);
});
}
}
这里是 MigLayout
经理的例子。
setLayout(new MigLayout("gap 5lp 7lp"));
我们使用逻辑像素来定义间隙。
截图: