2016-01-09 66 views
-2

我有一個類CustomTextField和CustomPasswordField。第一個擴展了JTextField,第二個擴展了JPasswordField類。兩者都有相同的代碼,但只有超類有所不同。我怎樣才能讓一個班而不是兩個班?這樣的事情:Java - 製作自定義字段

class CustomTextField extends JTextField{ 
     public CustomTextField(int col){ 
      super(col); 
     } 

     @Override 
     public void paintComponent(Graphics g){ 
      // Drawing custom shape with transparent color 
      super.paintComponent(g); 
     } 
} 

class CustomPasswordField extends JPasswordField{ 
     public CustomPasswordField(int col){ 
      super(col); 
     } 

     @Override 
     public void paintComponent(Graphics g){ 
      // Drawing custom shape with transparent color 
      super.paintComponent(g); 
     } 
} 

在此先感謝!

更新:

我可以延長這樣的:

class InputField extends JPasswordField{ 
     // code and paintComponent override 
} 

...每次我需要一個像這樣的文本字段時投給了JTextField:

JTextField field = new InputField(); 

但它似乎仍然表現得像JPasswordField(它使用*代替字符)

+0

您可以擴展泛型類,但不能擴展泛型類型。如果你解釋了你想要完成的事情,也許我們可以用正確的解決方案來幫助你。 – Kayaman

+0

好的。有沒有一種方法來實現該代碼? –

+1

「我怎樣才能實現這個」 - 實現什麼? – Idos

回答

0

T是泛型,不是真正的類。它只是一個由被調用者設置的類型的佔位符,當他打電話給你時。如果他用<String>來呼叫您,T將會是String

這不是你問什麼,但你正在尋找可能的內容:

您可以在打字使用繼承,這樣你就可以定義T有可能與其他一些類 <T extends Something><T super Something>

使用<T extends Something>您可以確定傳遞給您的任何類型至少是從Something延伸的Something或類。