- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作的第一个 Java GUI 应用程序。
基本上,我想要实现的目标看起来很简单。这是一个简单的水平布局,首先包含一个简单的 JLabel、一个 JTextArea、JButton 和至少另一个 JLabel。
为了澄清,我不希望文本区域和底部标签具有固定的大小,而是填充它们所拥有的空间,并且在其他组件之间有一些小的填充。
这是我到目前为止编写的代码,如上图所示,它还不是我想要实现的目标:
public class QueryPanel extends JPanel{
private JLabel headerLabel;
private String defaultString = "Insert query here...";
private boolean isTextFieldClicked = false;
private JTextArea queryTextArea;
private JScrollPane queryScrollPane;
private JButton executeQueryButton;
private JTextArea resultTextArea;
private JScrollPane resultScrollPane;
public QueryPanel(String headerText){
GridBagLayout gridLayout = new GridBagLayout();
setLayout(gridLayout);
GridBagConstraints constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.HORIZONTAL;
headerLabel = new JLabel();
headerLabel.setText(headerText);
constraints.gridy = 0;
add(headerLabel, constraints);
queryTextArea = new JTextArea(defaultString);
queryScrollPane = new JScrollPane(queryTextArea);
constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.HORIZONTAL;
constraints.weighty = 1.0;
constraints.weightx = 1.0;
constraints.gridy = 1;
add(queryScrollPane, constraints);
executeQueryButton = new JButton("Execute Query");
constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.HORIZONTAL;
constraints.gridy = 2;
add(executeQueryButton, constraints);
resultTextArea = new JTextArea();
resultTextArea.setEditable(false);
resultScrollPane = new JScrollPane(resultTextArea);
constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.HORIZONTAL;
constraints.weighty = 1.0;
constraints.weightx = 1.0;
constraints.gridy = 3;
add(resultScrollPane, constraints);
}
}
附注关于底部组件,想知道将静态结果显示为大标签而不是不可编辑的文本区域是否更好......找不到哪个更“正确”。
最佳答案
在上面作为问题粘贴的代码中,有两件事对我来说似乎是错误的(恕我直言)。
weightx/weighty
的值都是 1.0
,而它应该是在权重
方面有所不同,因为每个组件都应该在父容器上获取不同的长度。gbc.fill
设置为 HORIZONTAL
,这意味着调整大小时父级,组件只会在水平方向上调整大小。对我来说,如果组件能够扩展的话会更合适两个方向,而不是一个方向,以获得良好的视觉外观这里试试这个例子:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GridBagLayoutExample {
private static final int GAP = 5;
private GridBagConstraints gbc;
private JTextArea insertQueryTextArea;
private JTextArea resultTextArea;
private JScrollPane scroller;
private JButton executeQueryButton;
public GridBagLayoutExample () {
gbc = new GridBagConstraints ();
gbc.anchor = GridBagConstraints.FIRST_LINE_START;
gbc.insets = new Insets ( GAP, GAP, GAP, GAP );
gbc.fill = GridBagConstraints.BOTH;
}
private void displayGUI () {
JFrame frame = new JFrame ( "" );
frame.setDefaultCloseOperation ( JFrame.DISPOSE_ON_CLOSE );
JPanel contentPane = getPanel ();
contentPane.setLayout ( new BorderLayout ( GAP, GAP) );
JPanel containerPanel = getPanel ();
containerPanel.setLayout ( new GridBagLayout () );
addComponent ( 0, 0, 1, 1, 1.0, 0.1, containerPanel,
new JLabel ( "Please inesrt your DML query here: ", JLabel.CENTER ) );
insertQueryTextArea = getTextArea ();
scroller = new JScrollPane ();
scroller.setViewportView ( insertQueryTextArea );
addComponent ( 0, 1, 1, 1, 1.0, 0.4, containerPanel, scroller );
JPanel buttonPanel = getPanel ();
executeQueryButton = new JButton ( "Execute Query" );
buttonPanel.add ( executeQueryButton );
addComponent ( 0, 2, 1, 1, 1.0, 0.1, containerPanel, buttonPanel );
resultTextArea = getTextArea ();
scroller = new JScrollPane ();
scroller.setViewportView ( resultTextArea );
addComponent ( 0, 3, 1, 1, 1.0, 0.4, containerPanel, scroller );
contentPane.add ( containerPanel, BorderLayout.CENTER );
frame.setContentPane ( contentPane );
frame.pack ();
frame.setLocationByPlatform ( true );
frame.setVisible ( true );
}
private void addComponent ( int gridx, int gridy,
int gridwidth, int gridheight,
double weightx, double weighty,
JComponent container, JComponent component ) {
gbc.gridx = gridx;
gbc.gridy = gridy;
gbc.gridwidth = gridwidth;
gbc.gridheight = gridheight;
gbc.weightx = weightx;
gbc.weighty = weighty;
container.add ( component, gbc );
}
private JTextArea getTextArea () {
JTextArea tArea = new JTextArea ( 10, 10 );
tArea.setLineWrap ( true );
tArea.setWrapStyleWord ( true );
return tArea;
}
private JPanel getPanel () {
JPanel panel = new JPanel ();
panel.setOpaque ( true );
panel.setBorder ( BorderFactory.createEmptyBorder ( GAP, GAP, GAP, GAP ) );
return panel;
}
public static void main ( String [] args ) {
Runnable runnable = new Runnable () {
@Override
public void run () {
new GridBagLayoutExample ().displayGUI ();
}
};
EventQueue.invokeLater ( runnable );
}
}
Regarding the bottom component, wondering if it's better to show static results as a large label instead of a non-editable text area... couldn't find which is more "right" to do.
如果滚动 JTextArea
的内容是实际设计背后的想法,那么显示结果的 JTextArea
肯定是一个合适的解决方案。
这是输出:
关于java - 使用带有 GridBagConstraints 的 GridBagLayout 进行 Swing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31775049/
我正在将第一个 GridBagLayout 设置为主 JPanel。在此面板中,还使用此布局添加了其他十个面板(外部约束)。子面板包含大量文本,应使用新布局和 innerConstraints 将其放
我的任务是使用 Swing 在 Java 中设计一个基本的 UI,但我无法完成它的布局。我想创建类似于 this 的东西但是我使用 GridBagLayout 的尝试导致了一些非常困惑的事情。谁能提供
我有以下代码 GridBagConstraints c = new GridBagConstraints(); c.gridx=0; c.gridy=0; c.gridwidt
我正面临 Java GridBagLayout 的问题。 运行以下代码: import java.awt.GridBagConstraints; import java.awt.GridBagLayo
我正在使用 GridBagLayout到(当前)显示两行。我知道这种布局对于这项任务来说太过分了,但我正在努力学习如何使用它。问题是我已将两个面板添加到两个单独的行中,并且内容周围存在巨大差距(请参见
我正在使用 swing 尝试制作一个垄断板。我试图将板上的属性/空间制作为单独的 JPanel,它们可以有自己的实现、信息等,但我在空间的形状方面遇到了一些问题。我正在使用 GridBagLayout
我正在开发我的第一个应用程序来练习布局管理器,我开始学习 GridBagLayout,我想创建一个带有 Logo 和登录框的登录窗口。 目前我的应用程序如下所示: (来源:gyazo.com) 我觉得
我正在开发的 UI 显示一个面板,让用户选择电影并播放。有播放、暂停等控件。 布局似乎是我想要的。该面板使用 GridBagLayout。第 2 行显示状态消息的文本区域,第 3 行显示带有按钮和进度
我有一个面板,用作卡片布局的一部分。该面板使用 GridBagLayout。我向其中添加了两个组件:填充设置为 BOTH 的 JTextArea 和填充设置为水平的 JTextField。它们只占据水
我的问题是当我不乱用 ipadx 和 ipady 时。我的按钮粘在一起,但当我摆弄 ipadx 和 ipady 时,我发现第三个按钮将一个单元格移开。为什么以及如何解决这个困惑?代码: public
我想缩短我的文本字段,这样它就不会延伸到我的 jframe 的末尾,所以它现在看起来是这样的: 如何控制文本字段的宽度,使其不会像我尝试过 setPreferedSize() 和 setSize()
尝试将我的 JTable 旁边的表单与 GridBagLayout 对齐,但我正在努力将我的组件放在面板顶部。我需要价格标签和字段位于商品标签和字段下方,但我无法将其从面板底部移动。 如果我使用 an
我正在使用 GridBagLayout 测试一个简单的表单,但遇到了一些对齐问题。我想在顶部“Item”行下方的行上放置两个小字段,但长文本字段导致其下方的小文本字段无法正确对齐。 这是它当前正在执行
是否可以有一个像这张图一样的GridBagLayout? (本例中为多列 4 行 + 一列 5 行) 计算器的GridBagLayout: 最佳答案 对于最后一列,创建一个使用 GridLayout
我正在尝试学习如何使用JAVA的GUI库Swing。我想做的是将 2 个磁盘图像排成一行,并将 3 个打印机图像放在它们下面的行中。每个磁盘镜像应位于两个打印机镜像的中间。我(不幸的是)正在使用 Gr
我有一个 JPanel ,其中 GridBagLayout 作为布局管理器,我正在尝试进行这种安排: 忽略边框的额外深蓝色空间。 我总共有 5 列和 3 行,所有组件都将 setPreferredSi
如何为 GridBagLayout 中的不同行设置不同的颜色? P.S:我无法根据客户要求在我的应用程序中使用 swing。 最佳答案 对于 AWT 也适用 setBackground(Color)
我在 GridBagLayout 中有一个 3 * 6 的 JButtons 数组。但由于每个按钮的文本长度可能有所不同,因此每列按钮的宽度略有不同。如何使它们具有相同的宽度? 这是代码: for (
请看下面的代码 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class TestForm exte
我正在为一些按钮设置布局。我想在中间有 2 个按钮,在最后有一个。我有两个在中间,但最后一个在一边。如何将“后退”按钮设置在其他按钮下方。 (我对此进行了研究)。 public class Optio
我是一名优秀的程序员,十分优秀!