我有一个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。 “空白空间”不是理想的解决方案,因为对话框看起来不平衡。
答案 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作为弹出窗口。
当您显示弹出窗口时,您会将弹出窗口相关定位到输入组件。