2014-11-08 29 views
0

我真的需要幫助,以瞭解如何在我的按鈕上調用這個void方法。重點是根據要求該方法必須是無效的。我有方法上我想調用的方法如何在GUI按鈕上調用void方法?

public static void printIntBinary(int x) { 
    if (x <= 0) { 
    } else { 
     // System.out.println(x % 2) 
     printIntBinary(x/2); 
     System.out.println(x % 2); 
    } 
} 

//Portion of my Gui.. runButton actionListner 
runButton.addMouseListener(new MouseAdapter() { 
    public void mouseClicked(MouseEvent e) { 

     try{ 
      int mm = Integer.parseInt(binaryTextField.getText()); 
      //I'm having problem down here.. Because my method printInBinary is void type 
      binaryOutPut.append(Recurs.printIntBinary(mm)); 
     } catch(IllegalArgumentException ex){ 
      JOptionPane.showMessageDialog(null, "ertyui"); 
     } 
+1

'binaryOutPut.append(...)'方法接受一個參數,並且您調用方法'Recurs.printIntbinary(mm)',它不返回任何內容,因此您將'void'作爲參數,這不起作用。 – CoderMusgrove 2014-11-08 21:19:33

+0

你有什麼建議嗎? – Semm 2014-11-08 21:23:49

+2

請勿在按鈕上使用'MouseListener',使用'ActionListener',參見[如何使用按鈕,複選框和單選按鈕](http://docs.oracle.com/javase/tutorial/uiswing/components/ button.html)更多詳細信息 – MadProgrammer 2014-11-08 21:26:53

回答

0

如果你不得不保持方法printIntBinary,因爲它是(奇怪的規定,因爲它直接打印到控制檯)按鈕,然後你可以暫時重定向System.out流以捕獲方法的結果:

public void mouseClicked(MouseEvent e) { 
    try{ 
     int mm = Integer.parseInt(binaryTextField.getText()); 

     // create temporary outputstream and set it to System.out 
     final OutputStream originalOS = System.out; 
     final ByteArrayOutputStream os = new ByteArrayOutputStream(); 
     final PrintStream ps = new PrintStream(os); 
     System.setOut(ps); 

     Recurs.printIntBinary(mm); 
     binaryOutPut.append(os.toString()); 

     //reset System.out 
     System.setOut(originalOS); 
    } catch(IllegalArgumentException ex){ 
     JOptionPane.showMessageDialog(null, "ertyui"); 
    } 
} 

這對於需求的骯髒的解決方法。

如果您鏈接,以避免空格(e.q. \r\n)被添加到textarea的,然後更改os.toString()os.toString().replaceAll("\\s", "")

如果你可以改變方法printIntBinary(除了它的返回類型),那麼你就可以做到以下幾點:

public static void printIntBinary(int x, JTextArea binaryOutPut) { 
    if (x > 0) { 
     printIntBinary(x/2); 
     binaryOutPut.append(String.valueOf(x % 2)); 
    } 
} 

如果你喜歡在自己的行每個號碼,然後使用binaryOutPut.append(String.valueOf(x % 2) + System.getProperty("line.separator"));

相關問題