2015-12-04 68 views
1

我正在嘗試爲正在進行的工作項目創建另一個GUI屏幕。這個GUI屏幕如果觸發,將打開一個包含三個JTextFields和一個確認按鈕(這是實際JOptionsPane的一部分)的JOptionsPane。將操作監聽器添加到JptionsPane w/JTextFields

我無法使JTextField上的動作偵聽器正常工作。當用戶點擊確認時,我希望文本字段可以提取輸入的任何值。然後通過各種條件,該計劃將繼續。我創建了一個測試類來計劃和創建與我的其餘程序隔離的GUI,以便我可以在下面分享它。讓我補充一點,我爲我創建這個GUI的方式表示歉意。我不擅長GUI的視覺方面,所以我使用了對我來說最簡單的方法,它丟失了很多帶有邊界佈局的JPanel。也許不是最好的,但它的工作原理:)

這裏是我的代碼:

package guitesting; 

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JLabel; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 



public class GUITesting 

{ 

    public static int tester = 0; 
    public static String resultString = null; 
    static JTextField tRDFI = new JTextField("RDFI Number Here",30); 

    public static void NOCGUI(){ 

     String text = "<html>" 
       + "This is where the entry detail will go"+ 
       "<br><br>" 
       +"</html>"; 

     JLabel RDFI = new JLabel("RDFI Number:"); 
     JLabel DDA = new JLabel("DDA:"); 
     JLabel TCode = new JLabel("Transaction Code:  "); 



     tRDFI.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent e){ 
       resultString = tRDFI.getText(); 
      } 
     }); 

     JTextField tDDA = new JTextField("DDA Number Here",30); 
     JTextField tTCode = new JTextField("TCode Here",30); 
     JLabel label = new JLabel(text); 

     JPanel mainPanel = new JPanel(); 
     JPanel fieldPanel = new JPanel(); 
     JPanel textPanel = new JPanel(); 
     JPanel northFieldPanel = new JPanel(); 
     JPanel southFieldPanel = new JPanel(); 
     JPanel tCodePanel = new JPanel(); 
     JPanel RDFIPanel = new JPanel(); 
     JPanel DDAPanel = new JPanel(); 

     mainPanel.setLayout(new BorderLayout()); 
     fieldPanel.setLayout(new BorderLayout()); 
     textPanel.setLayout(new BorderLayout()); 
     northFieldPanel.setLayout(new BorderLayout()); 
     southFieldPanel.setLayout(new BorderLayout()); 
     tCodePanel.setLayout(new BorderLayout()); 
     RDFIPanel.setLayout(new BorderLayout()); 
     DDAPanel.setLayout(new BorderLayout()); 

     textPanel.add(label,BorderLayout.CENTER); 
     RDFIPanel.add(RDFI,BorderLayout.WEST); 
     RDFIPanel.add(tRDFI,BorderLayout.EAST); 
     tCodePanel.add(TCode,BorderLayout.WEST); 
     tCodePanel.add(tTCode,BorderLayout.EAST); 
     DDAPanel.add(DDA,BorderLayout.WEST); 
     DDAPanel.add(tDDA,BorderLayout.EAST); 
     northFieldPanel.add(RDFIPanel,BorderLayout.NORTH); 
     northFieldPanel.add(DDAPanel,BorderLayout.SOUTH); 
     southFieldPanel.add(tCodePanel,BorderLayout.NORTH); 
     fieldPanel.add(northFieldPanel,BorderLayout.NORTH); 
     fieldPanel.add(southFieldPanel,BorderLayout.SOUTH); 
     mainPanel.add(textPanel,BorderLayout.NORTH); 
     mainPanel.add(fieldPanel,BorderLayout.SOUTH);  

     String options[] = {"Confirm"}; 

     int result = JOptionPane.showOptionDialog(null, mainPanel, "NOC Builder", JOptionPane.YES_OPTION, 
       JOptionPane.PLAIN_MESSAGE,null, options, options[0]); 

     if(result==0 && resultString.equals("A")){ 
      System.out.println("pass"); 
     } 

    } 

    public static void main(String args[]){ 

     GUITesting.NOCGUI(); 



     } 

} 

回答

3

我不認爲一個ActionListener是你想要的這裏。只有在文本字段有焦點時用戶按回車鍵纔會調用它。

如果您想要聽取文本字段中的所有更改,請查看DocumentListener

textField.getDocument().addDocumentListener(documentListener); 

但是,爲什麼不只是在對話框返回時引用實際的文本字段呢?這可能是最簡單的解決方案。試試這個:

if (result == 0) { 
    System.out.println("tRDFI: " + tRDFI.getText()); 
    System.out.println("tDDA: " + tDDA.getText()); 
    System.out.println("tTCode: " + tTCode.getText()); 
} 
+0

哦,我的。我沒有意識到這會很容易。非常感謝威士忌,爲我的問題創造了一個非常簡單的解決方案。 我是否需要有一個動作監聽器才能完成此操作? – jesric1029

+0

不,如果您刪除了ActionListener,則會得到相同的結果。 – whiskeyspider

+0

好的。我完全理解它的工作原理,現在再次感謝您的幫助! – jesric1029