gpt4 book ai didi

java - 为什么我的 UI 在浏览器中运行与在我的计算机 (Java Swing) 上运行时会丢失格式?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:45:14 27 4
gpt4 key购买 nike

对于我的 CSE 205(Java 编程 2)类(class),我们必须设计一个非常简单的 GUI 小程序。我对 Swing 非常熟悉,之前在我自己的一些项目中使用过它。我设计的程序几乎没有问题,从 Eclipse 运行时它在我的计算机上看起来很完美:

enter image description here

但是当我在线提交它时,它在浏览器中运行,UI 变得严重困惑,返回到默认值:

enter image description here

我已经习惯使用 GridBagLayout,因为它很简单。这就是我在这里使用的。类 CreatePanel 和 SelectPanel(如第一张图片所示)都扩展了 JPanel(根据我的教授)。我设置每个使用:

this.setLayout(new GridBagLayout());

以及每个组件的组成部分:

//Call the method addItem() to add the create button to the panel
addItem(this, createB,0,2,2,1,defaultInset,GridBagConstraints.CENTER);



//-------
public void addItem(JPanel p, JComponent c, int x, int y, int width, int height, int[] inset, int align)
{
GridBagConstraints gc = new GridBagConstraints();
gc.gridx = x;
gc.gridy = y;
gc.gridwidth = width;
gc.gridheight = height;
gc.weightx = 0;
gc.weighty = 0;
gc.insets = new Insets(inset[0],inset[1],inset[2],inset[3]);
gc.anchor = align;
gc.fill = GridBagConstraints.NONE;
p.add(c, gc);
}

有人知道会发生什么吗?考虑到我一半以上的时间都花在了让布局看起来正确上,我想要一个简单的修复。如果需要,我可以发布更多代码。感谢您的任何建议。

--编辑--

好吧,我已经根据@MadProgrammer 的建议做了一些尝试。我想我已经缩小了问题所在的范围。

这是我用来将 JTextField 的大小设置为标签“输入宠物类型:

petTypeTF = new JTextField("");
petTypeTF.setPreferredSize(new Dimension(125, 60));

现在,如果我将代码更改为其他任何内容,例如设置列数:

petTypeTF = new JTextField("",12);
petTypeTF.setPreferredSize(new Dimension(125, 60));

我得到的 UI 与我在线提交时看起来完全一样。与设置列数有关的事情似乎搞砸了。这有助于缩小任何人的范围吗?

最佳答案

确实没有足够的代码来确定问题的全部范围,但一些想法可能会有所帮助。

GridBagLayout 将想要尝试让它的组件根据首选尺寸进行布局(如果可能的话)。如果不能,它将查看最小尺寸。

确保您正在创建包含列(对于文本区域)行的文本组件。这将根据许多重要因素自动确定组件的首选大小。

enter image description here

public class BadLayout11 {

public static void main(String[] args) {
new BadLayout11();
}

public BadLayout11() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception ex) {
}

JTabbedPane pane = new JTabbedPane();
pane.add("Pet List Creation", new TestPane());

JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(pane);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);

}
});
}

public class TestPane extends JPanel {

public TestPane() {

setLayout(new GridBagLayout());

JPanel fields = new JPanel(new GridBagLayout());

JTextField field = new JTextField(12);
JTextArea area = new JTextArea(10, 20);
JLabel label = new JLabel("Enter a Pet Type");
JButton button = new JButton("Create a Pet");

GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.insets = new Insets(2, 2, 2, 2);
gbc.anchor = GridBagConstraints.WEST;

fields.add(label, gbc);
gbc.weightx = 1;
gbc.gridx++;
fields.add(field, gbc);

gbc.fill = GridBagConstraints.NONE;
gbc.gridx = 0;
gbc.weightx = 0;
gbc.gridy++;
gbc.gridwidth = 2;
gbc.anchor = GridBagConstraints.CENTER;
fields.add(button, gbc);

gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.insets = new Insets(2, 2, 2, 2);
gbc.gridheight = GridBagConstraints.REMAINDER;
gbc.weightx = 1;
gbc.weighty = 1;
gbc.fill = GridBagConstraints.BOTH;
add(fields, gbc);
gbc.gridx++;
add(new JScrollPane(area), gbc);

}

}

}

不幸的是,在某些时候,一切都会达到无法维持布局的地步,并且一切都会崩溃或只是看起来被剪裁了。

在这些情况下,您可以将整个容器放在 JScrollPane 中,但我认为在这种情况下这是最坏的情况。

关于java - 为什么我的 UI 在浏览器中运行与在我的计算机 (Java Swing) 上运行时会丢失格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14948021/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com