- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个计算器来计算三角形、圆形和矩形的面积和周长/周长。我几乎完成了所有工作,但我一生都无法弄清楚如何让 GridBagLayout 工作。 Here是一张我目前拥有的专辑以及我想要它的样子的专辑。我已经粘贴了 GridBagLayout 来进行三角形计算,因为这给了我最困难的时间。
final JPanel triPanel = new JPanel(new GridBagLayout());
final GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(10, 10, 0, 0);
gbc.gridx = 0;
gbc.gridy = 0;
triPanel.add(heightInt); //height instructions
gbc.gridx = 1;
gbc.gridy = 0;
triPanel.add(triHeight); //height textfield
gbc.gridx = 2;
gbc.gridy = 0;
triPanel.add(baseInt); //base instructions
gbc.gridx = 3;
gbc.gridy = 0;
triPanel.add(triBase); //base textfield
gbc.gridx = 0;
gbc.gridy = 1;
triPanel.add(side2Int); //side2 instructions
gbc.gridx = 1;
gbc.gridy = 1;
triPanel.add(triSide2); //side2 textfield
gbc.gridx = 2;
gbc.gridy = 1;
triPanel.add(side3Int); //side3 instructions
gbc.gridx = 3;
gbc.gridy = 1;
triPanel.add(triSide3); //side3 textfield
gbc.gridx = 0;
gbc.gridy = 2;
triPanel.add(rectCalc); //calculate button
gbc.gridx = 0;
gbc.gridy = 3;
triPanel.add(Triangle); //image
在此之间,我为“计算”按钮设置了一个 ActionListener。在 ActionListener 中,按下计算按钮后会显示另一个面板。最后,我将面板添加到框架中并将框架设置为可见。
triJFRame.add(triPanel);
triJFRame.setVisible(true);
最佳答案
您必须将 GridBagConstrains
的实例传递给 add()
方法。
另请注意,不必写“输入高度:”(可能是即使违反设计准则),我们也会写“高度:”。
GridBagLayout 示例:
package com.zetcode;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class GridBagLayoutTriangle extends JFrame {
public GridBagLayoutTriangle() {
initUI();
setTitle("Triangle");
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void initUI() {
JPanel imgPanel = new JPanel();
imgPanel.setPreferredSize(new Dimension(150, 150));
imgPanel.setBorder(BorderFactory.createEtchedBorder());
final JPanel triPanel = new JPanel(new GridBagLayout());
triPanel.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 5));
final GridBagConstraints gbc = new GridBagConstraints();
gbc.insets.left = 5;
gbc.insets.top = 5;
triPanel.add(new JLabel("Height:"), gbc);
gbc.gridx = 1;
triPanel.add(new JTextField(10), gbc);
gbc.gridx = 2;
triPanel.add(new JLabel("Base:"), gbc);
gbc.gridx = 3;
triPanel.add(new JTextField(10), gbc);
gbc.gridx = 0;
gbc.gridy = 1;
triPanel.add(new JLabel("Side 2:"), gbc);
gbc.gridx = 1;
triPanel.add(new JTextField(10), gbc);
gbc.gridx = 2;
triPanel.add(new JLabel("Side 3:"), gbc);
gbc.gridx = 3;
triPanel.add(new JTextField(10), gbc);
gbc.gridx = 0;
gbc.gridy = 2;
gbc.gridwidth = 4;
gbc.insets.top = 10;
gbc.fill = GridBagConstraints.CENTER;
triPanel.add(new JButton("Calculate"), gbc);
gbc.gridy = 3;
gbc.insets.bottom = 10;
triPanel.add(imgPanel, gbc);
add(triPanel);
pack();
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
GridBagLayoutTriangle ex = new GridBagLayoutTriangle();
ex.setVisible(true);
}
});
}
}
我使用了带有 eclipse 刻边框的面板,而不是图像。
您的布局非常简单,但由于某种原因您遇到了困难。虽然 GridBagLayout 是一种灵活的布局管理器,但它是一个复杂的管理器。这是因为我们需要单独定义每个单元格。
我还使用 MigLayout
管理器和 GroupLayout
管理器创建了两个示例。它们更易于使用且更便携。 (GridBagLayout 的一大缺点经理认为它与分辨率无关。)
MigLayout解决方案
MigLayout
是一个非常灵活的第三方布局管理器。我发现它总是最简单的使用此管理器创建布局。管理器与分辨率无关。
package com.zetcode;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import net.miginfocom.swing.MigLayout;
public class MigLayoutTriangle extends JFrame {
public MigLayoutTriangle() {
initUI();
setTitle("MigLayout triangle");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}
private void initUI() {
JPanel imgPanel = new JPanel();
imgPanel.setPreferredSize(new Dimension(150, 150));
imgPanel.setBorder(BorderFactory.createEtchedBorder());
JPanel pnl = new JPanel(new MigLayout("wrap 5", "[right][][right]"));
pnl.add(new JLabel("Height:"));
pnl.add(new JTextField(10));
pnl.add(new JLabel("Base:"));
pnl.add(new JTextField(10), "wrap");
pnl.add(new JLabel("Side 2:"));
pnl.add(new JTextField(10));
pnl.add(new JLabel("Side 3:"));
pnl.add(new JTextField(10), "wrap");
pnl.add(new JButton("Calculate"), "spanx, center");
pnl.add(imgPanel, "spanx, center");
add(pnl);
pack();
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
MigLayoutTriangle ex = new MigLayoutTriangle();
ex.setVisible(true);
}
});
}
}
GroupLayout解决方案
GroupLayout
在我看来是最强大的内置管理器。有趣的是该管理器只有几个选项可供设置,但功能非常强大。管理者也与分辨率无关。 GroupLayout
也是使用的默认管理器NetBeans GUI 构建器。
package com.zetcode;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.BorderFactory;
import javax.swing.GroupLayout;
import static javax.swing.GroupLayout.Alignment.BASELINE;
import static javax.swing.GroupLayout.Alignment.CENTER;
import static javax.swing.GroupLayout.Alignment.TRAILING;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.LayoutStyle;
public class GroupLayoutTriangle extends JFrame {
public GroupLayoutTriangle() {
initUI();
setTitle("GroupLayout triangle");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}
private void initUI() {
Container pane = getContentPane();
GroupLayout gl = new GroupLayout(pane);
pane.setLayout(gl);
JLabel heightLbl = new JLabel("Height:");
JLabel baseLbl = new JLabel("Base:");
JLabel side2Lbl = new JLabel("Side 2:");
JLabel side3Lbl = new JLabel("Side 3:");
JTextField field1 = new JTextField(10);
JTextField field2 = new JTextField(10);
JTextField field3 = new JTextField(10);
JTextField field4 = new JTextField(10);
JButton calcBtn = new JButton("Calculate");
JPanel imgPanel = new JPanel();
imgPanel.setPreferredSize(new Dimension(150, 150));
imgPanel.setMaximumSize(new Dimension(150, 150));
imgPanel.setBorder(BorderFactory.createEtchedBorder());
gl.setAutoCreateGaps(true);
gl.setAutoCreateContainerGaps(true);
gl.setHorizontalGroup(gl.createParallelGroup(CENTER)
.addGroup(gl.createSequentialGroup()
.addGroup(gl.createParallelGroup(TRAILING)
.addComponent(heightLbl)
.addComponent(side2Lbl))
.addGroup(gl.createParallelGroup()
.addComponent(field1)
.addComponent(field3))
.addGroup(gl.createParallelGroup(TRAILING)
.addComponent(baseLbl)
.addComponent(side3Lbl))
.addGroup(gl.createParallelGroup()
.addComponent(field2)
.addComponent(field4)))
.addComponent(calcBtn)
.addComponent(imgPanel)
);
gl.setVerticalGroup(gl.createSequentialGroup()
.addGroup(gl.createParallelGroup(BASELINE)
.addComponent(heightLbl)
.addComponent(field1)
.addComponent(baseLbl)
.addComponent(field2))
.addGroup(gl.createParallelGroup(BASELINE)
.addComponent(side2Lbl)
.addComponent(field3)
.addComponent(side3Lbl)
.addComponent(field4))
.addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(calcBtn)
.addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(imgPanel)
);
pack();
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
GroupLayoutTriangle ex = new GroupLayoutTriangle();
ex.setVisible(true);
}
});
}
}
这些组是经过明智选择的,以便标签右对齐。
关于java - 使用 GridBagLayout 对齐对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25149938/
我正在将第一个 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
我是一名优秀的程序员,十分优秀!