我正在尋找一種將示例文本放入JTextField的方法,並將其變爲灰色。示例文本應該在任何東西輸入到該文本字段後立即消失。一些類似於當用戶使用標題字段發佈問題時的計算器功能。JTextField中的示例文本
如果它已經是JTextField的擴展實現,那麼我可以放入它作爲一個簡單的替換,我想它。任何來自swingx的東西都可以工作。我猜如果沒有一個簡單的方法來做到這一點,我的選擇可能會重寫JTextField的paint方法做這樣的事情。
感謝
我正在尋找一種將示例文本放入JTextField的方法,並將其變爲灰色。示例文本應該在任何東西輸入到該文本字段後立即消失。一些類似於當用戶使用標題字段發佈問題時的計算器功能。JTextField中的示例文本
如果它已經是JTextField的擴展實現,那麼我可以放入它作爲一個簡單的替換,我想它。任何來自swingx的東西都可以工作。我猜如果沒有一個簡單的方法來做到這一點,我的選擇可能會重寫JTextField的paint方法做這樣的事情。
感謝
Text Prompt類提供所需的功能,而無需使用一個自定義的JTextField。
而不是覆蓋,把一個價值在該領域,並添加KeyListener
當擊鍵被註冊,將刪除該值。也許它也改變了前景。
你可以將它包裝到你自己定製的JTextField
類中,該類將採用構造函數中的默認文本。
你不能用純文本字段來做到這一點,但是你可以在JTextField
的頂部放置一個禁用的JLabel
,並在文本字段獲得焦點時將其隱藏。
如果您可以使用外部庫,Jide software的Swing組件具有您正在查找的內容;它被稱爲LabeledTextField(javadoc),它是JIDE公共層(開源項目)的一部分 - 這是免費的。它正在做什麼mklhmnn建議。
如何使用默認文本初始化文本字段併爲其指定焦點偵聽器,以便在獲得焦點時,如果文本.equals默認文本,則調用JTextField上的selectAll()。
做這樣的:
定義你喜歡的初始文本字符串,並設置您的文本字段:
String initialText = "Enter your initial text here";
jTextField1.setText(initialText);
添加焦點監聽你的文本字段,其中選擇TextField的全部內容(如果它仍然具有初始值)。您可以鍵入的任何內容都會替換整個內容,因爲它已被選中。
jTextField1.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusGained(java.awt.event.FocusEvent evt) {
if (jTextField1.getText().equals(initialText)) {
jTextField1.selectAll();
}
}
});
private JLabel l;
JPromptTextField(String prompt) {
l = new JLabel(prompt, SwingConstants.CENTER);
l.setForeground(Color.GRAY);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (this.getText().length() == 0) {
// Reshape the label if needed, then paint
final Rectangle mine = this.getBounds();
final Rectangle its = l.getBounds();
boolean resized = (mine.width != its.width) || (mine.height != its.height);
boolean moved = (mine.x != its.x) || (mine.y != its.y);
if (resized || moved)
l.setBounds(mine);
l.paint(g);
}
}
您不能使用密鑰偵聽器,因爲可以通過其他方法(如複製和粘貼)輸入數據。 – 2011-02-18 18:01:05
我實際上不會在值字段中添加此示例文本,因爲存在使用getText()檢索示例文本的風險 – dm76 2011-02-18 18:01:17
@Hover,我首先想到了焦點偵聽器,但在SO標題示例中作爲一個例子,OP提到,文本不會在焦點上消失,而是在開始輸入時消失。如果你確實允許粘貼添加一個DocumentListener可能是一個更好的解決方案。 – jzd 2011-02-18 19:24:16