Java Swing - 在JLabel.setVisible(...)上调整大小对话框

时间:2013-06-06 12:03:11

标签: java swing jdialog

我有一个Java Swing对话框,每个输入组件(即JTextField)上方都有一个隐藏 JLabel。这个隐藏的JLabel的目的是将其用作其输入组件的验证输出。

让我们说,有一个输入字段用于描述某个实体,它必须是非空的,并且应该包含一些特殊的东西。如果出错,该操作可以调用以下方法:

private void invalidateDescription(String errMessage) {
    errDescriptionLabel.setText(errMessage);                      
    errDescriptionLabel.setVisible(true);
    descriptionTextField.setBackground(ERR_COLOR);
}

之后,我致电pack()invalidate()

问题是,JDialog仍然具有相同的垂直大小,因此某些组件(对话框底部的按钮)会消失(因为它们不在视图范围内)。

你有什么建议如何解决它?

最诚挚的问候。

编辑:我原谅提到,JDialog有一个“自由设计”布局(Netbeans GUI Builder默认)。 编辑2:我正在寻找一种解决方案,它不需要占位符(错误)JLabel。 “空白空间”不是理想的解决方案,因为对话框看起来不平衡。

3 个答案:

答案 0 :(得分:1)

使用CardLayout放置标签并清空JPanels并在必要时进行交换。

答案 1 :(得分:1)

当条目有效时,不要使用setVisible(),而是为errDescriptionLabel提供与封闭面板相匹配的背景颜色。

答案 2 :(得分:1)

  

我有一个Java Swing对话框,每个输入组件上面都有一个隐藏的JLabel

我不会为此使用隐藏组件。我会改变:

private void invalidateDescription(String errMessage)

private void invalidateDescription(String errMessage, component inputComponent)

然后我会显示一个包含错误消息的弹出窗口。您可以使用非装饰的JDialog作为弹出窗口。您甚至可以使用JPopupMenu作为弹出窗口。

当您显示弹出窗口时,您会将弹出窗口相关定位到输入组件。