2012-04-23 53 views
1

我希望通過覆蓋paint方法將數字繪製到JTextField上。因此,當用戶編輯文本字段時,編號不會消失。然而,目前,這個數字並沒有出現,我曾嘗試過:重寫JTextField中的繪製方法以繪製文本

public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    if(number != 0){ 
      g.setColor(Color.RED); 
      g.drawString(String.valueOf(number),0,0); 
    } 
} 

任何想法,這是甚至可能的嗎?

+0

'如果(數字!= 0){'如果數字== 0則做別的事情(例如不同的顏色)! – 2012-04-23 14:10:03

+0

如果您的問題已得到解答,或者不再有效,請勾選以選擇最合適的答案,以便大家都知道問題已得到解決。謝謝。 – wattostudios 2012-05-14 13:45:00

回答

1

也許有沒有理由覆蓋paintComponent()JTextField,而不是使用

  • JTextField.setBackground()

  • JTextField.setForeground()

  • JTextField.setFont()

  • JTextField.setHorizontalAlignment(javax.swing.SwingConstants.LEFT)

  • 一些黑客是通過放在那裏Html彩色或特殊格式的文本可能

編輯

也許這個問題是關於

  • Document/DocumentListener
過濾 KeyEvents

  • JFormattedTextFieldNumber Formatter
+1

在我看到*「放置Html格式的文本」之前,我正要進行投票表決 - *在像JTextField這樣的純文本組件中看起來不太好。 ;)編輯的任何機會,澄清? – 2012-04-23 13:45:27

+0

@安德魯湯普森完成了,但並沒有讓你的評論不知所措,在你希望從 - > Caret,InputMask, – mKorbel 2012-04-23 13:54:03

+0

這樣的文件中,我只是簡單地引用了像JEditorPane '支持(HTML)格式的文本..我實際上認爲用例需要一個配置的文本字段。 +1,爲(現在)前4個點。 – 2012-04-23 13:55:22

1

你爲什麼不只是增加一個小JLabelJTextField的面前? JLabel可能包含該號碼,並且由於它不可編輯,所以無論用戶在JTextField中發生了什麼變化,它都將始終存在。您也可以通過致電setForeground(Color.RED);JLabel設置爲紅色。這可能是一個更簡單的解決方案?

例如,而不是做這個...

JPanel panel = new JPanel(new BorderLayout()); 
JTextField textfield = new JTextField("Hello"); 
panel.add(textfield,BorderLayout.CENTER); 

你可能會做這樣的事情......

JPanel panel = new JPanel(new BorderLayout()); 

JTextField textfield = new JTextField("Hello"); 
panel.add(textfield,BorderLayout.CENTER); 

JLabel label = new JLabel("1."); 
label.setForeground(Color.RED); 
panel.add(label,BorderLayout.WEST); 

增加了一個紅色JLabelJTextField的左側,因爲您使用BorderLayout作爲JPanel,那麼它會自動使JLabel成爲可能的最小值。

+0

真正的錯誤我試過這個,但它不顯示JLabel:/ – 2012-04-23 13:47:50

+0

對不起,澄清,我的意思是,而不是添加一個JTextField到您的JPanel,你實際上會添加一個JLabel和一個JTextField。請參閱我編輯的答案。如果你不能讓JLabel出現,你必須用別的東西來覆蓋它。例如,調用JPanel.add(label,BorderLayout.CENTER)和JPanel.add(textfield,BorderLayout.CENTER)將覆蓋標籤並僅顯示文本字段。根據我編輯的代碼,您需要確保它們不會互相覆蓋。希望這可以幫助。 – wattostudios 2012-04-23 13:57:20

2

嘗試在g.drawString(String.valueOf(number),0,0);呼叫中使用Y位置。例如。使用getHeight()/2

2

..當用戶編輯文本字段時數字不會消失。

正如@mKorbel所指出的那樣,爲了得到紅色數字,不需要重寫JTextField,只需使用公共方法進行配置即可。 OTOH ..

g.drawString(String.valueOf(number),0,0); 

如果這是真正意義的數字,也許是最好的方法是使用一個JSpinnerSpinnerNumberModel,並設置自定義SpinnerUI

+0

[適用於JSpinner + 1k](http://stackoverflow.com/a/9779203/714968) – mKorbel 2012-04-23 15:48:14