blob: 3b779a15ce5eee778ee58f7eb7a77fae908acafd [file] [log] [blame]
/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.ui.components.panels;
import com.intellij.ui.JBColor;
import com.intellij.util.ui.UIUtil;
import javax.swing.*;
import java.awt.*;
/**
* @author kir
*
* A label with possible error text is placed under validated component.
*/
public abstract class ValidatingComponent<T extends JComponent> extends NonOpaquePanel {
private static final Font ERROR_FONT = UIUtil.getLabelFont().deriveFont(Font.PLAIN, 10f);
private JLabel myErrorLabel;
private T myMainComponent;
private JLabel myLabel;
protected ValidatingComponent() {
setLayout(new BorderLayout());
}
public final void doInitialize() {
myErrorLabel = createErrorLabel();
myMainComponent = createMainComponent();
add(myMainComponent, BorderLayout.CENTER);
add(myErrorLabel, BorderLayout.SOUTH);
}
protected abstract T createMainComponent();
public void setErrorText(String errorText) {
if ("".equals(errorText) || errorText == null) {
errorText = " ";
}
myErrorLabel.setText(errorText);
}
public JLabel getErrorLabel() {
return myErrorLabel;
}
public T getMainComponent() {
return myMainComponent;
}
public String getErrorText() {
final String text = myErrorLabel.getText();
return " ".equals(text) ? "" : text;
}
public void setLabel(JLabel label) {
myLabel = label;
myLabel.setLabelFor(myMainComponent);
add(label, BorderLayout.WEST);
}
protected JLabel createErrorLabel() {
final JLabel label = new JLabel(" ");
label.setForeground(JBColor.red);
label.setFont(ERROR_FONT);
return label;
}
public void doLayout() {
super.doLayout();
if (myLabel != null) {
myErrorLabel.setBorder(BorderFactory.createEmptyBorder(0, myLabel.getSize().width, 0, 0));
}
}
}