我有一个具有很多形式的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扩展名:
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的任何地方。
要为所有JTextField
设置相同的边框,请使用UIManager类。
UIManager.getDefaults().put("TextField.border", BorderFactory.createTitledBorder("George"));
上面的代码将每个JTextField
的默认边框设置为标题为George的标题边框。
UIManager
类管理所谓的外观]”。我建议阅读类UIManager
的javadoc。
[为了在JTextField
获得焦点或失去焦点时更改边框,请使用方法FocusEvent
和方法focusGained()
的focusLost()
参数。该参数包含事件的“源”。
evt.getSource()
您知道源是
JTextField
,因此只需将其投射并设置边框即可。
JTextField textField = (JTextField) evt.getSource();
textField.setBorder( /* whatever border you need */ );