2017-05-03 59 views
0

首次發佈爲SO通常具有我需要的內容,但無法在任何地方找到它。Java - 文本框文本不可見

獨立工作斯坦福大學的CS106A,我正在給顯示器添加一個文本框。

該文本框沒有VISUALLY顯示任何更新。它要麼保持空白,要麼保留在文本中,如果.setText(「some text」);用來。但踢球者是文本框,它應該是其他所有東西,它看起來並不像它。

只是爲了澄清一些混淆,我的問題是之前我點擊圖形按鈕或使用回車鍵。我可以在空白處輸入任何我想要的東西,但我看不到它。我可以完全或部分刪除任何預設文本並鍵入新文本,我看不到任何內容已被刪除或輸入。

一旦激活e.getActionCommand()系統將打印輸出或刪除的內容,該部分完美工作。

會發生什麼:
- 文本框接受輸入(但不顯示新的文本,不會改變任何現有的文本)
- e.getActionCommand()的作品,並返回輸入的文本
- e.getSource()作品並返回輸入的文本

如:
類型「測試」到文本框中
文本在視覺上繼續顯示「輸入名稱」
name.getText()返回「測試」

import acm.program.*; 
import java.awt.Font; 
import java.awt.event.*; 
import javax.swing.*; 

public class NameSurfer extends ConsoleProgram implements NameSurferConstants { 

private static final int BUTTON_FONT_SIZE = 24; 
private static final String BUTTON_FONT = "Serif"; 

public void init() { 

    setSearchBar();  

} 

private void setSearchBar() { 

/* This method sets up the bottom search bar and interactors */ 


JLabel nameText = new JLabel("Name: "); 
nameText.setFont(new Font(BUTTON_FONT, Font.PLAIN, BUTTON_FONT_SIZE)); 
add(nameText,SOUTH); 

name = new JTextField(10); 
name.addActionListener(this); 
name.setActionCommand("Graph"); 
name.setFont(new Font(BUTTON_FONT, Font.PLAIN, BUTTON_FONT_SIZE)); 
name.setText("Enter a name"); 
add(name,SOUTH); 

graph = new JButton("Graph"); 
graph.setFont(new Font(BUTTON_FONT, Font.PLAIN, BUTTON_FONT_SIZE)); 
add(graph, SOUTH); 

clear = new JButton("Clear"); 
clear.setFont(new Font(BUTTON_FONT, Font.PLAIN, BUTTON_FONT_SIZE)); 
add(clear, SOUTH); 

addActionListeners(); 

} 


public void actionPerformed(ActionEvent e) { 

    if(e.getSource() == clear){ 
     println("Testing clear"); 
    }else if(e.getActionCommand() == "Graph"){ 
     println(name.getText()); 
     name.setText("Enter a name");   
    } 

} 

private JButton clear; 
private JButton graph; 
private JTextField name; 

} 
+1

我不使用該庫,但有一個問題是在這裏:'else if(e.getActionCommand()==「Graph」){'。不要使用'=='或'!='比較字符串。改爲使用「equals(...)」或「equalsIgnoreCase(...)」方法。理解'=='檢查兩個*對象引用*是否相同,而不是你感興趣的。另一方面,方法檢查兩個字符串是否具有相同順序的相同字符,這就是這裏很重要。現在我不認爲這是導致你目前的問題,但它肯定會導致*未來*的問題,所以你會想要解決它。 –

+0

良好的捕捉,是的,這將是一個問題,但不會導致這個特定的問題。 – cVer

回答

1

我覺得你的問題是在這裏:

else if(e.getActionCommand() == "Graph"){ 
     println(name.getText()); 
     name.setText("Enter a name");   
    } 

此行name.setText("Enter a name");是每當一個ActionEvent觸發,因爲你setActionCommand總是等於Graph(假設你應用了修復,你的文本設置爲"Enter a name"來自@ hovercraft-full-of-eels)。

之所以name.getText()是正確的,是因爲它讓您在活動監聽器調用name.setText("之前返回值,但隨後立即用name.setText("Enter a name");變回"Enter a name"

因此,要解決這個問題,只是註釋掉或刪除行,然後再次測試代碼:

else if(e.getActionCommand() == "Graph"){ 
     println(name.getText()); 
     //name.setText("Enter a name");   
    } 

然後,你需要考慮你怎麼真的要重置文本字段,當它有點應該重置。

+0

無論是否在讀取命令後設置了名稱,都會發生此問題。如果文本框在命令前後(即setText()根本沒有被調用)留空,我仍然看不到輸入。想象一個文本框,你鍵入的任何內容都不可見。使用SetText(「某些文本」)在文本框中設置的任何內容都是可見的,並且可以被刪除和替換,但是直覺上它將始終保持「一些文本」,即使您的手指仍然擊中了螢幕或退格鍵。這發生在我觸發e.getActionCOmmand() – cVer

+0

@cVer有趣之前,因爲這是一個applet,你嘗試使用'name.repaint();'強制重繪或者通過直接使用repaint() ;' – sorifiend

+0

我試過使用'name.repaint();'然而,我不清楚它放在哪裏。將它添加到創建按鈕的地方什麼也不做。我也嘗試過製作一個小測試程序來運行文本字段,但我也無法輸入。我開始懷疑它是否與我的JRE或Eclipse有關。從聯機下載文本框示例但是工作(已編譯) – cVer