在Java Swing中自定义JTextField-向JTextField添加简单/复合/自定义边框

问题描述 投票:1回答:2

我有一个具有很多形式的Netbeans Java项目。这些形式有很多JTextField。我想用自定义边框自定义那些文本字段。

 private void tfUserNameFocusGained(java.awt.event.FocusEvent evt) {                                       
        tfUserName.setBorder(javax.swing.BorderFactory.createCompoundBorder(javax.swing.BorderFactory.createCompoundBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(204, 204, 255)), javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153, 153, 255))), javax.swing.BorderFactory.createMatteBorder(0, 4, 2, 0, new java.awt.Color(255, 255, 255))));
 }

private void tfUserNameFocusLost(java.awt.event.FocusEvent evt) {                                     
        tfUserName.setBorder(javax.swing.BorderFactory.createCompoundBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(204, 204, 204)), javax.swing.BorderFactory.createMatteBorder(0, 4, 2, 0, new java.awt.Color(255, 255, 255))));
}

我可以将这些代码行添加到每个JTextField,但我正在寻找一种更简单的方法来进行此操作。

java swing jtextfield
2个回答
2
投票

您可以像这样使用您自己的JTextField扩展名:

public class OwnJTextField extends JTextField {
private void tfUserNameFocusGained(java.awt.event.FocusEvent evt) {
    tfUserName.setBorder(javax.swing.BorderFactory.createCompoundBorder(javax.swing.BorderFactory.createCompoundBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(204, 204, 255)), javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153, 153, 255))), javax.swing.BorderFactory.createMatteBorder(0, 4, 2, 0, new java.awt.Color(255, 255, 255))));
}
private void tfUserNameFocusLost(java.awt.event.FocusEvent evt) {
    tfUserName.setBorder(javax.swing.BorderFactory.createCompoundBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(204, 204, 204)), javax.swing.BorderFactory.createMatteBorder(0, 4, 2, 0, new java.awt.Color(255, 255, 255))));
}

以及需要使用OwnJTextField而不是JTextField的任何地方。


2
投票

要为所有JTextField设置相同的边框,请使用UIManager类。

UIManager.getDefaults().put("TextField.border", BorderFactory.createTitledBorder("George"));

上面的代码将每个JTextField的默认边框设置为标题为George的标题边框。

UIManager类管理所谓的外观]”。我建议阅读类UIManagerjavadoc

编辑

[为了在JTextField获得焦点或失去焦点时更改边框,请使用方法FocusEvent和方法focusGained()focusLost()参数。该参数包含事件的“源”。

evt.getSource()

您知道源是JTextField,因此只需将其投射并设置边框即可。

JTextField textField = (JTextField) evt.getSource();
textField.setBorder( /* whatever border you need */ );
© www.soinside.com 2019 - 2024. All rights reserved.