diff --git a/platform/platform-api/src/com/intellij/ui/components/JBPasswordField.java b/platform/platform-api/src/com/intellij/ui/components/JBPasswordField.java new file mode 100644 index 000000000000..e0e51e40924e --- /dev/null +++ b/platform/platform-api/src/com/intellij/ui/components/JBPasswordField.java @@ -0,0 +1,56 @@ +/* + * Copyright 2000-2014 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; + +import com.intellij.ui.SimpleTextAttributes; +import com.intellij.util.ui.ComponentWithEmptyText; +import com.intellij.util.ui.StatusText; +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +/** + * @author nik + */ +public class JBPasswordField extends JPasswordField implements ComponentWithEmptyText { + private final TextComponentEmptyText myEmptyText; + + public JBPasswordField() { + myEmptyText = new TextComponentEmptyText(this); + } + + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + myEmptyText.paintStatusText(g); + } + + @NotNull + @Override + public StatusText getEmptyText() { + return myEmptyText; + } + + public void setPasswordIsStored(boolean stored) { + if (stored) { + myEmptyText.setText("", SimpleTextAttributes.GRAY_ATTRIBUTES); + } + else { + myEmptyText.clear(); + } + } +} diff --git a/platform/platform-api/src/com/intellij/ui/components/JBTextField.java b/platform/platform-api/src/com/intellij/ui/components/JBTextField.java index aea1ac8f7670..5f92f6d8421f 100644 --- a/platform/platform-api/src/com/intellij/ui/components/JBTextField.java +++ b/platform/platform-api/src/com/intellij/ui/components/JBTextField.java @@ -22,11 +22,9 @@ import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.awt.*; -import java.awt.event.FocusEvent; -import java.awt.event.FocusListener; public class JBTextField extends JTextField implements ComponentWithEmptyText { - private StatusText myEmptyText; + private TextComponentEmptyText myEmptyText; public JBTextField() { init(); @@ -49,30 +47,7 @@ public class JBTextField extends JTextField implements ComponentWithEmptyText { private void init() { UIUtil.addUndoRedoActions(this); - myEmptyText = new StatusText(this) { - @Override - protected boolean isStatusVisible() { - return JBTextField.this.getText().isEmpty() && !isFocusOwner(); - } - - @Override - protected Rectangle getTextComponentBound() { - Rectangle b = getBounds(); - return new Rectangle(getInsets().left >> 1, 0, b.width, b.height); - } - }; - myEmptyText.clear(); - addFocusListener(new FocusListener() { - @Override - public void focusGained(FocusEvent e) { - repaint(); - } - - @Override - public void focusLost(FocusEvent e) { - repaint(); - } - }); + myEmptyText = new TextComponentEmptyText(this); } @NotNull @@ -84,7 +59,6 @@ public class JBTextField extends JTextField implements ComponentWithEmptyText { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); - myEmptyText.getComponent().setFont(getFont()); - myEmptyText.paint(this, g); + myEmptyText.paintStatusText(g); } } diff --git a/platform/platform-api/src/com/intellij/ui/components/TextComponentEmptyText.java b/platform/platform-api/src/com/intellij/ui/components/TextComponentEmptyText.java new file mode 100644 index 000000000000..b494be87b5c9 --- /dev/null +++ b/platform/platform-api/src/com/intellij/ui/components/TextComponentEmptyText.java @@ -0,0 +1,63 @@ +/* + * Copyright 2000-2014 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; + +import com.intellij.util.ui.StatusText; + +import javax.swing.text.JTextComponent; +import java.awt.*; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; + +/** +* @author nik +*/ +class TextComponentEmptyText extends StatusText { + private JTextComponent myOwner; + + public TextComponentEmptyText(JTextComponent owner) { + super(owner); + myOwner = owner; + clear(); + myOwner.addFocusListener(new FocusListener() { + @Override + public void focusGained(FocusEvent e) { + myOwner.repaint(); + } + + @Override + public void focusLost(FocusEvent e) { + myOwner.repaint(); + } + }); + } + + public void paintStatusText(Graphics g) { + getComponent().setFont(myOwner.getFont()); + paint(myOwner, g); + } + + @Override + protected boolean isStatusVisible() { + return myOwner.getText().isEmpty() && !myOwner.isFocusOwner(); + } + + @Override + protected Rectangle getTextComponentBound() { + Rectangle b = myOwner.getBounds(); + return new Rectangle(myOwner.getInsets().left >> 1, 0, b.width, b.height); + } +}