在 Java Swings 中自定义 JTextField - 向 JTextField 添加 simple/compound/custom 边框

Customize JTextField in Java Swings - add simple/compound/custom borders to JTextField

我有一个包含很多表单的 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,但我正在寻找一种更简单的方法来执行此操作。

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

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

以上代码会将每个 JTextField 的默认边框设置为标题为 George.

的带标题边框

UIManager class 管理所谓的 look-and-feel。我建议阅读 javadoc for class UIManager.

编辑

要在 JTextField 获得或失去焦点时更改边框,请使用方法 focusGained() 和方法 focusLost()FocusEvent 参数。参数包含事件的"source"。

evt.getSource()

你知道来源是 JTextField 所以只需投射它并设置边框。

JTextField textField = (JTextField) evt.getSource();
textField.setBorder( /* whatever border you need */ );

您可以像这样使用自己的 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。