Java 摇摆 |最后一个 JTextField 未设置为自定义大小
Posted
技术标签:
【中文标题】Java 摇摆 |最后一个 JTextField 未设置为自定义大小【英文标题】:Java Swing | The last JTextField doesn't sets to custom size 【发布时间】:2021-11-15 05:08:23 【问题描述】:我正在创建一个 Word Puzzle Solver。我创建了 for 循环来创建 JTextField“网格”。
创建右下角的最后一个字段时,它不会调整为我输入的大小。它正在调整到框架的大小。
我的代码:
public class SolverGUI
int sizeOfRect = 50;
static int height = 5;
static int width = 5;
static JTextField[][] textFields = new JTextField[width][height];
static JFrame frame = new JFrame("Word Puzzle Solver");
public void createAndShowGUI()
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 800);
createWordPuzzleArea();
frame.setVisible(true);
public void createWordPuzzleArea()
for (int i = 0; i < height; i++)
for (int i2 = 0; i2 < width; i2++)
textFields[i2][i] = new JTextField();
frame.add(textFields[i2][i]);
textFields[i2][i].setBounds(10 + (i2 * sizeOfRect), 10 + (i * sizeOfRect), sizeOfRect, sizeOfRect);
【问题讨论】:
【参考方案1】:您可以使用GridLayout,而不是自己制作网格。
使用setBounds
让我觉得你正在使用null-layout
哪个is not right,这似乎是制作复杂用户界面的最佳和最简单的方法,但如果你不这样做,它就不是相信我check this example。 Swing 必须处理多个 PLAF、操作系统、屏幕尺寸和分辨率,因此像素完美的 UI 并不好,正如您在示例中看到的那样,一切都中断了,因此使用像 GridLayout
这样的布局管理器可以解决这些问题。
您可以改为这样,避免自己计算每个单元格,让布局管理器为您做这件事:)
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class GridOfTextFields
private JFrame frame;
private JPanel pane;
private JTextField[][] fields;
private static final int ROWS = 5;
private static final int COLS = 5;
public static void main(String[] args)
SwingUtilities.invokeLater(new GridOfTextFields()::createAndShowGUI);
private void createAndShowGUI()
frame = new JFrame(getClass().getSimpleName());
pane = new JPanel()
@Override
public Dimension getPreferredSize()
return new Dimension(300, 300);
;
pane.setLayout(new GridLayout(ROWS, COLS, 1, 1));
fields = new JTextField[ROWS][COLS];
for (int i = 0; i < ROWS; i++)
for (int j = 0; j < COLS; j++)
fields[i][j] = new JTextField();
pane.add(fields[i][j]);
frame.add(pane);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
为了解释为什么你的代码不工作是你在和布局管理器作斗争,我在运行你的代码时在我的电脑上得到这个输出:
使它起作用的方法是调用frame.setLayout(null)
再次不推荐,请参阅本文的第二段,如果您坚持使用null-layout
,您将随着您不断向程序添加功能,您会发现自己陷入越来越多的麻烦中。
移除布局管理器后:
【讨论】:
以上是关于Java 摇摆 |最后一个 JTextField 未设置为自定义大小的主要内容,如果未能解决你的问题,请参考以下文章
如何从另一个 java 类中的 jTextField 或 jFormattedTextField 获取数据