gpt4 book ai didi

java - 当 JLabel 出现时,它会移动其余组件

转载 作者:行者123 更新时间:2023-12-01 13:20:06 24 4
gpt4 key购买 nike

我使用 JLabel 来通知用户 JTextField 中的输入是否有错误。

如果出现问题,我会将 JLabel 的文本设置为“无效输入”。但是,当设置标签中的文本时,它会稍微“插入”布局的其余部分。我希望一切都留在原处。有什么想法吗?

public Dialog(Window owner){

widthL = new JLabel("Width: ");
heightL = new JLabel("Height: ");
widthF = new JTextField(5);
heightF = new JTextField(5);
apply = new JButton("Apply");
error = new JLabel("");

GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(10,10,10,10);

gbc.gridy = 1;

gbc.gridx = 1;
add(widthL,gbc);

gbc.gridx = 2;
add(widthF,gbc);

gbc.gridy = 2;

gbc.gridx = 1;
add(heightL,gbc);

gbc.gridx = 2;
add(heightF,gbc);

gbc.gridy = 1;
gbc.gridx = 3;
gbc.gridheight = 2;
add(apply,gbc);

gbc.gridheight = 1;
gbc.gridy = 3;
gbc.gridx = 2;
add(error,gbc);

apply.addActionListener(this);

setVisible(true);

}

public void actionPerformed(ActionEvent e) {

int width,height;

try{
width = Integer.parseInt(widthF.getText());
height = Integer.parseInt(heightF.getText());
}catch(NumberFormatException ex){
error.setText("Invalid input");
}

}

最佳答案

由于您没有提供 Minimal, Complete, Tested, and Readable example这说明了问题,我只看了一眼就发现您正在使用 GridBagLayout。

您可以使用的一些技巧:

  1. 与标签位于同一列的某个位置(就在上面或就在下面),您可以放置​​一个 Box.createHorizo​​ntalStrut(...)组件的长度足以比任何预期的要长JLabel 的长度。当然,你需要知道最长的提前文本(并计算其在 JLabel 中的宽度),以便工作。

  2. 将您的 JLabel 放在自己的线上,以免打扰将其他组件放置在同一行上。你想要做确保它的网格宽度将跨越多个列,以免使 JLabel 的列展开以适应布局的其余部分。

  3. 在 JLabel 中使用 HTML 定义固定宽度(以像素为单位)。

  4. 使用带有
    标记的 HTML 创建多行 JLabel。

  5. 创建一个 JTextField 并相应地装饰它(不透明度、边框、不可编辑等),使其看起来像就像 JLabel 一样。

  6. 只需将您的消息放在 JTextArea 中,因为 JLabels 并不是真正的非常适合动态、任意文本。你可能会有布局问题;-)

  7. 如果“无效输入”是标签中唯一存在的文本,则预设JLabel 上的文本,然后调用label.setVisible(true/false) 在适当的时候。

关于java - 当 JLabel 出现时,它会移动其余组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22104916/

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