在 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。
我有一个包含很多表单的 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。