2013-10-31 119 views
0

我最終大大簡化了我的方法。我只是修改了第二個類文件來獲取按鈕,並完全擺脫了第三個文件。現在操作按鈕和按下鍵盤上的返回鍵都會導致程序完成計算。這確實不難,只需要使用相同的方法,但需要使用不同類型的偵聽器。謝謝!創建執行功能的按鈕

import javax.swing.JFrame; 
public class Fahrenheit 
{ 
    public static void main (String[] args) 
    { 

    JFrame frame = new JFrame ("Fahrenheit"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    FahrenheitPanel panel = new FahrenheitPanel(); 

    frame.getContentPane().add(panel); 
    frame.pack();frame.setVisible(true); 

    } 
} 

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 


public class FahrenheitPanel extends JPanel 
{ 
    private JLabel inputLabel, outputLabel, resultLabel; 
    private JTextField fahrenheit; 
    private JButton push; 

    public FahrenheitPanel() 
    { 
     inputLabel = new JLabel ("Enter Fahrenheit temperature:"); 
     outputLabel = new JLabel ("Temperature in Celsius: "); 
     resultLabel = new JLabel ("---"); 
     push = new JButton ("Convert"); 

     fahrenheit = new JTextField (5); 
     fahrenheit.addActionListener (new TempListener()); 
     push.addActionListener (new ButtonListener()); 

     add (inputLabel); 
     add(fahrenheit); 
     add (outputLabel); 
     add (resultLabel); 
     add (push); 

     setPreferredSize (new Dimension(300,75)); 
     setBackground (Color.yellow); 
    } 


    private class TempListener implements ActionListener 
    { 
     public void actionPerformed (ActionEvent event) 
     { 
      int fahrenheitTemp, celsiusTemp; 

      String text = fahrenheit.getText(); 

      fahrenheitTemp = Integer.parseInt (text); 
      celsiusTemp = (fahrenheitTemp-32) * 5/9; 

      resultLabel.setText (Integer.toString (celsiusTemp)); 
      } 
     } 


    private class ButtonListener implements ActionListener 
    { 
     public void actionPerformed (ActionEvent event) 
     { 
      int fahrenheitTemp, celsiusTemp; 

      String text = fahrenheit.getText(); 

      fahrenheitTemp = Integer.parseInt (text); 
      celsiusTemp = (fahrenheitTemp-32) * 5/9; 

      resultLabel.setText (Integer.toString (celsiusTemp));   
     } 
    } 
} 
+0

*「但第三個是我需要一些指導的地方」*嗯......「提出問題」。那對於指導如何?此外,爲了更快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。 –

+0

好點。下次會做。感謝您的鏈接。 – Lou44

回答

1

您可以執行以下操作來實現它。

  1. 定義類PushCounterPanel類型的變量,就像

    私人FahrenheitPanel面板;

    並更改類PushCounterPanel的構造函數。

    公共PushCounterPanel(FahrenheitPanel面板) { this.panel =面板; ... }

要做到這一點,我們可以得到在面板FahrenheitPanel輸入文本值。

2當點擊按鈕時,您需要檢查文本值是否爲空且不是第一個數字。如果數字值在文本字段中輸入,則在類ButtonListener中添加以下代碼。

  fahrenheitTemp = Integer.parseInt(panel.getFahrenheit().getText()); 
     celsiusTemp = (fahrenheitTemp-32) * 5/9; 

以這種方式,您可以通過單擊按鈕來填充值。

3因此,您需要更改以下代碼。

a)以華氏主要方法

frame.getContentPane()添加(新PushCounterPanel(面板。)); b)將以下getter/setter方法添加到FahrenheitPanel類中。

public JTextField getFahrenheit() { 
    return fahrenheit; 
} 


public void setFahrenheit(JTextField fahrenheit) { 
    this.fahrenheit = fahrenheit; 

希望這可以幫助你一些。

+0

我懂了!我要用我的解決方案編輯我的原始帖子。謝謝! – Lou44