2017-10-10 16 views
0

Java新手...爲實踐創建基本表單。我有一個包含10個以上文本框的表單,我希望在用戶進入該字段時將其格式化爲青色,並在離開該字段時返回至白色。如果編輯了文本,它將變爲紅色以向用戶顯示它們所在的字段以及它們編輯了文本。Java - 整個格式的字段

但是,我的代碼工作是否必須爲每個文本框複製此焦點偵聽器和修改偵聽器代碼,或者是否有方法將此設置爲表單上所有文本框的「默認」?

text_8 = new Text(shell, SWT.BORDER); 
    text_8.addFocusListener(new FocusAdapter() {   @Override 
     public void focusGained(FocusEvent e) { 
      text_8.setBackground(SWTResourceManager.getColor(SWT.COLOR_CYAN)); 
     } 
     @Override 
     public void focusLost(FocusEvent e) { 
      text_8.addModifyListener(new ModifyListener() { 
       public void modifyText(ModifyEvent e) { 
        text_8.setForeground(SWTResourceManager.getColor(SWT.COLOR_RED));     
       } 
      }); 
      text_8.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE)); 
     } 
    }); 
    text_8.setBounds(10, 341, 76, 21); 

回答

0

好,最簡單的方法是提取這些聽衆到單獨的變量,然後只需添加到您希望每一個部件...

嘗試是這樣的:

private static class MyListeners implement ModifyListener extends FocusAdapter 
{ 
    @Override 
    public void focusGained(FocusEvent e) 
    { 
     final Text t = (Text) e.source; 
     t.setBackground(SWTResourceManager.getColor(SWT.COLOR_CYAN)); 
     t.addModifyListener(this); 
    } 
    @Override 
    public void focusLost(FocusEvent e) 
    { 
     final Text t = (Text) e.source; 
     t.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE)); 
     t.removeModifyListener(this); 
    } 
    public void modifyText(ModifyEvent e) 
    { 
     final Text t = (Text) e.source; 
     t.setForeground(SWTResourceManager.getColor(SWT.COLOR_RED));     
    } 
} 
private final MyListeners myListeners = new MyListeners(); 

... 

text_8 = new Text(shell, SWT.BORDER); 
text_8.addFocusListener(myListeners); 
text_8.setBounds(10, 341, 76, 21);