| /* |
| * 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)); |
| } |
| } |
| } |