- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我正在编写的程序中,我希望有 10 个垂直对齐的文本字段。相反,我得到了这个:
代码在这里:
import java.awt.*;
import java.util.Random;
import javax.swing.*;
import java.awt.event.*;
public class Gsb extends JFrame {
JTextField word1;
JTextField word2;
JTextField word3;
JTextField word4;
JTextField word5;
JTextField word6;
JTextField word7;
JTextField word8;
JTextField word9;
JTextField word10;
JButton gofor;
JButton rego;
JTextArea Stuff;
JPanel panel;
JPanel texts;
JPanel buttons;
JButton Quit;
JPanel bigt;
String[] words = new String[20];
static int[] randnums = new int[20];
int i = 0;
public static void main(String[] args) {
new Gsb();
Random Rand = new Random();
int counter = 0;
int rand;
int[] pick = new int[20];
for(int i = 0; i < 20; i++)
{
rand = Rand.nextInt(20) + 1;
if (CheckForDuplicate(pick, rand, counter))
{
pick[i] = rand;
counter++;
}
else
{
i--;
}
}
for(int p = 0; p < 20; p++) {
randnums[p] = pick[p] - 1;
}
}
static boolean CheckForDuplicate(int[] array, int number, int counter)
{
for (int i = 0; i < counter; i++)
{
if (array[i] == number)
{
return false;
}
}
return true;
}
public Gsb() {
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension dim = tk.getScreenSize();
int xPos = (dim.width / 2) - (this.getWidth() / 2);
int yPos = (dim.height / 2) - (this.getHeight() / 2);
this.setLocation(xPos, yPos);
GridBagConstraints c = new GridBagConstraints();
GridBagConstraints d = new GridBagConstraints();
this.setSize(500, 500);
this.setTitle("checker");
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
panel = new JPanel();
texts = new JPanel();
buttons = new JPanel();
bigt = new JPanel();
word1 = new JTextField(10);
word2 = new JTextField(10);
word3 = new JTextField(10);
word4 = new JTextField(10);
word5 = new JTextField(10);
word6 = new JTextField(10);
word7 = new JTextField(10);
word8 = new JTextField(10);
word9 = new JTextField(10);
word10 = new JTextField(10);
gofor = new JButton("BONANZA!");
rego = new JButton("Restart");
Stuff = new JTextArea(40, 40);
Quit = new JButton("Exit");
Stuff.setLineWrap(true);
Stuff.setWrapStyleWord(true);
Stuff.setText("welcome to the google search bonanza! first user write 10 random words and press BONANZA!");
JScrollPane useless = new JScrollPane(Stuff, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
panel.setLayout(new GridBagLayout());
texts.setLayout(new GridBagLayout());
buttons.setLayout(new GridBagLayout());
bigt.setLayout(new GridBagLayout());
c.fill = GridBagConstraints.CENTER;
d.fill = GridBagConstraints.RELATIVE;
d.gridx = 0;
d.gridy = 0;
texts.add(word1, d);
d.gridx = 0;
d.gridy = 1;
texts.add(word2, d);
d.gridx = 0;
d.gridy = 2;
texts.add(word3, d);
d.gridx = 0;
d.gridy = 3;
texts.add(word4, d);
d.gridx = 0;
d.gridy = 4;
texts.add(word5, d);
d.gridx = 0;
d.gridy = 5;
texts.add(word6, d);
d.gridx = 0;
d.gridy = 6;
texts.add(word7, d);
d.gridx = 0;
d.gridy = 7;
texts.add(word8, d);
d.gridx = 0;
d.gridy = 8;
texts.add(word9, d);
d.gridx = 0;
d.gridy = 9;
texts.add(word10);
c.gridx = 10;
c.gridy = 0;
buttons.add(gofor,c);
c.gridx = 9;
c.gridy = 0;
buttons.add(Quit,c);
c.gridx = 8;
c.gridy = 0;
buttons.add(rego ,c);
Bonanza bonanzer = new Bonanza();
Bonanzatwo bon2 = new Bonanzatwo();
Reset Reseter = new Reset();
Exit Exiter = new Exit();
rego.addActionListener(Reseter);
gofor.addActionListener(bonanzer);
gofor.addActionListener(bon2);
Quit.addActionListener(Exiter);
bigt.add(Stuff);
c.gridheight = 20;
c.gridx = 0;
c.gridy = 0;
panel.add(texts, c);
panel.add(buttons);
panel.add(bigt);
panel.add(useless);
this.add(panel);
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
this.setUndecorated(true);
this.setVisible(true);
this.setTitle("The Google search bonanza");
}
基本上,如果不清楚,我会做这样的事情:
最佳答案
当你想创建一个网格时,不要使用 GridBagLayout —— 使用 GridLayout,这里有 1 列和 0(可变数量)行。您可以仅为 JTextField 创建一个 JPanel,给它一个 GridLayout,然后根据需要使用 GridBagLayout 将这个 JPanel 添加到主 GUI,但这里的关键是嵌套 JPanel,每个 JPanel 使用自己的布局。
其他建议,当我看到如下变量时:
JTextField word1;
JTextField word2;
JTextField word3;
JTextField word4;
JTextField word5;
JTextField word6;
JTextField word7;
JTextField word8;
JTextField word9;
JTextField word10;
我想,她真的不想在这里使用数组或ArrayList吗?或者可能是 JTable。
此外,您将 JTextArea 添加到 JScrollPane,然后将 JTextArea 而不是 JScrollPane 添加到 GUI。
例如:
import java.awt.BorderLayout;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.*;
public class Gsb2 extends JPanel {
private static final int WORD_FIELD_COUNT = 10;
private static final int COL_SIZE = 10;
private static final int TA_ROWS = 40;
private static final int TA_COLS = 40;
private JTextField[] wordFields = new JTextField[WORD_FIELD_COUNT];
private int rows;
private JTextArea stuffArea = new JTextArea(TA_ROWS, TA_COLS);
public Gsb2() {
JPanel wordFieldsPanel = new JPanel(new GridLayout(0, 1));
for (int i = 0; i < wordFields.length; i++) {
wordFields[i] = new JTextField(COL_SIZE);
wordFieldsPanel.add(wordFields[i]);
}
JPanel wrapWordFieldsPanel = new JPanel(new GridBagLayout());
wrapWordFieldsPanel.add(wordFieldsPanel);
JPanel buttonPanel = new JPanel(new GridLayout(1, 0, 5, 0));
buttonPanel.add(new JButton(new MyAction("Restart", KeyEvent.VK_R)));
buttonPanel.add(new JButton(new MyAction("Exit", KeyEvent.VK_X)));
buttonPanel.add(new JButton(new MyAction("BONANZA!", KeyEvent.VK_B)));
JScrollPane scrollPane = new JScrollPane(stuffArea);
JPanel rightPanel = new JPanel(new BorderLayout(5, 5));
rightPanel.add(wrapWordFieldsPanel, BorderLayout.CENTER);
rightPanel.add(buttonPanel, BorderLayout.PAGE_END);
setLayout(new BorderLayout(5, 5));
setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
add(rightPanel, BorderLayout.LINE_START);
add(scrollPane, BorderLayout.CENTER);
}
private class MyAction extends AbstractAction {
public MyAction(String name, int mnemonic) {
super(name);
putValue(MNEMONIC_KEY, mnemonic);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO add code
}
}
private static void createAndShowGui() {
Gsb2 mainPanel = new Gsb2();
JFrame frame = new JFrame("Gsb2");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
}
好的,好的,要“匹配规范”,请使用 BoxLayout:
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.*;
public class Gsb3 extends JPanel {
private static final int WORD_FIELD_COUNT = 10;
private static final int COL_SIZE = 10;
private static final int TA_ROWS = 40;
private static final int TA_COLS = 40;
private JTextField[] wordFields = new JTextField[WORD_FIELD_COUNT];
private int rows;
private JTextArea stuffArea = new JTextArea(TA_ROWS, TA_COLS);
public Gsb3() {
JPanel wordFieldsPanel = new JPanel(new GridLayout(0, 1));
for (int i = 0; i < wordFields.length; i++) {
wordFields[i] = new JTextField(COL_SIZE);
wordFieldsPanel.add(wordFields[i]);
}
JPanel wrapWordFieldsPanel = new JPanel(new GridBagLayout());
wrapWordFieldsPanel.add(wordFieldsPanel);
JPanel buttonPanel = new JPanel(new GridLayout(1, 0, 5, 0));
buttonPanel.add(new JButton(new MyAction("Restart", KeyEvent.VK_R)));
buttonPanel.add(new JButton(new MyAction("Exit", KeyEvent.VK_X)));
buttonPanel.add(new JButton(new MyAction("BONANZA!", KeyEvent.VK_B)));
buttonPanel.setMaximumSize(buttonPanel.getPreferredSize());
JScrollPane scrollPane = new JScrollPane(stuffArea);
setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS));
setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
add(wrapWordFieldsPanel);
add(Box.createHorizontalStrut(5));
add(buttonPanel);
add(Box.createHorizontalStrut(5));
add(scrollPane);
}
private class MyAction extends AbstractAction {
public MyAction(String name, int mnemonic) {
super(name);
putValue(MNEMONIC_KEY, mnemonic);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO add code
}
}
private static void createAndShowGui() {
Gsb3 mainPanel = new Gsb3();
JFrame frame = new JFrame("Gsb2");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
}
关于java - Swing GridBagLayout 表现出来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40000837/
我正在将第一个 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
我是一名优秀的程序员,十分优秀!