2016-11-16 111 views
0

我正在嘗試使用Eclipse製作簡單的GUI計算器 actionlistener位於底部,eclipse表示我的ButtonAdd無法解析 錯誤位於第125-131行左右,任何幫助表示讚賞! :dJButton無法在actionListener內部解析

package main; 

import java.awt.EventQueue; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Insets; 
import java.awt.event.ActionEvent; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JTextField; 
import java.awt.event.ActionListener; 

public class GUIApp { 

private JFrame frame; 
public JTextField txtNumber_1; 
public JTextField txtNumber; 
public JTextField textField; 
public JButton ButtonAdd; 
public JButton ButtonSub; 
public JButton ButtonMulti; 
public JButton ButtonDiv; 
public JButton btnRng; 
String num1; 
String num2; 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       GUIApp window = new GUIApp(); 
       window.frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the application. 
*/ 
public GUIApp() { 
    initialize(); 
} 

/** 
* Initialize the contents of the frame. 
* @return 
*/ 
public void initialize() { 
    frame = new JFrame(); 
    frame.setBounds(100, 100, 450, 300); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    GridBagLayout gridBagLayout = new GridBagLayout(); 
    gridBagLayout.columnWidths = new int[]{0, 0, 0, 0, 0}; 
    gridBagLayout.rowHeights = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; 
    gridBagLayout.columnWeights = new double[]{0.0, 0.0, 0.0, 1.0, Double.MIN_VALUE}; 
    gridBagLayout.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE}; 
    frame.getContentPane().setLayout(gridBagLayout); 

    ButtonAdd = new JButton("Addition"); 
    ButtonAdd.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      num1 = txtNumber_1.getText(); 
      num2 = txtNumber.getText(); 
      if(ButtonAdd.getModel().isPressed()) 
      textField.setText(num1 + num2); 
     } 
    }); 
    GridBagConstraints gbc_ButtonAdd = new GridBagConstraints(); 
    gbc_ButtonAdd.insets = new Insets(0, 0, 5, 5); 
    gbc_ButtonAdd.gridx = 0; 
    gbc_ButtonAdd.gridy = 0; 
    frame.getContentPane().add(ButtonAdd, gbc_ButtonAdd); 

    ButtonSub = new JButton("Subtraction"); 
    GridBagConstraints gbc_ButtonSub = new GridBagConstraints(); 
    gbc_ButtonSub.insets = new Insets(0, 0, 5, 5); 
    gbc_ButtonSub.gridx = 0; 
    gbc_ButtonSub.gridy = 2; 
    frame.getContentPane().add(ButtonSub, gbc_ButtonSub); 

    txtNumber_1 = new JTextField(); 
    txtNumber_1.setText("Number 1"); 
    txtNumber_1.setToolTipText("insert a number"); 
    GridBagConstraints gbc_txtNumber_1 = new GridBagConstraints(); 
    gbc_txtNumber_1.insets = new Insets(0, 0, 5, 0); 
    gbc_txtNumber_1.fill = GridBagConstraints.HORIZONTAL; 
    gbc_txtNumber_1.gridx = 3; 
    gbc_txtNumber_1.gridy = 2; 
    frame.getContentPane().add(txtNumber_1, gbc_txtNumber_1); 
    txtNumber_1.setColumns(10); 

    ButtonMulti = new JButton("Multiplication"); 
    GridBagConstraints gbc_ButtonMulti = new GridBagConstraints(); 
    gbc_ButtonMulti.insets = new Insets(0, 0, 5, 5); 
    gbc_ButtonMulti.gridx = 0; 
    gbc_ButtonMulti.gridy = 4; 
    frame.getContentPane().add(ButtonMulti, gbc_ButtonMulti); 

    txtNumber = new JTextField(); 
    txtNumber.setText("Number 2"); 
    txtNumber.setToolTipText("insert other number"); 
    GridBagConstraints gbc_txtNumber = new GridBagConstraints(); 
    gbc_txtNumber.insets = new Insets(0, 0, 5, 0); 
    gbc_txtNumber.fill = GridBagConstraints.HORIZONTAL; 
    gbc_txtNumber.gridx = 3; 
    gbc_txtNumber.gridy = 5; 
    frame.getContentPane().add(txtNumber, gbc_txtNumber); 
    txtNumber.setColumns(10); 

    ButtonDiv = new JButton("Division"); 
    GridBagConstraints gbc_ButtonDiv = new GridBagConstraints(); 
    gbc_ButtonDiv.insets = new Insets(0, 0, 5, 5); 
    gbc_ButtonDiv.gridx = 0; 
    gbc_ButtonDiv.gridy = 6; 
    frame.getContentPane().add(ButtonDiv, gbc_ButtonDiv); 

    btnRng = new JButton("RNG"); 
    GridBagConstraints gbc_btnRng = new GridBagConstraints(); 
    gbc_btnRng.insets = new Insets(0, 0, 0, 5); 
    gbc_btnRng.gridx = 0; 
    gbc_btnRng.gridy = 8; 
    frame.getContentPane().add(btnRng, gbc_btnRng); 

    textField = new JTextField(); 
    textField.setToolTipText("output"); 
    GridBagConstraints gbc_textField = new GridBagConstraints(); 
    gbc_textField.gridx = 3; 
    gbc_textField.gridy = 8; 
    frame.getContentPane().add(textField, gbc_textField); 
    textField.setColumns(10); 
} 
public void actionPerformed(ActionEvent arg0) { 
    String num1; 
    String num2; 
    num1 = txtNumber_1.getText(); 
    num2 = txtNumber.getText(); 
    if(ButtonAdd.getModel().isPressed()) 
    textField.setText(num1 + num2); 

} 
} 

的GUI用的WindowBuilder的方式

+0

你'ButtonAdd'的範圍僅限於'initialize'方法。 – Berger

+0

(1-)'錯誤在第125-131行左右,' - 你的意思是「在...周圍」?該錯誤消息會告訴你「確切」導致問題的線路。如果你需要幫助,就明確你的問題。我們沒有時間質疑哪條線路可能導致問題,也可能不會導致問題。 – camickr

回答

2

ButtonAdd是一個局部引用,這意味着它只能在initialize方法內進行訪問。解決方法是在方法之外聲明ButtonAdd

JButton ButtonAdd; 

public void initialize() { 
    ButtonAdd = new JButton("Addition"); 
} 
public void actionPerformed(ActionEvent arg0) { 
    // here we can now access ButtonAdd 
} 

另外一個提示,通過Java的標準命名約定,你通常用小寫字母開頭的變量和引用,所以ButtonAdd - >buttonAdd

+0

謝謝!刪除錯誤但按鈕不會更改輸出框中的文本 – CrimsonK9

+0

在使用WindowBuilder時,打開它並雙擊設計中的添加按鈕。 Eclipse將添加必要的ActionListener。在裏面做你的代碼。 – Squiddie

+0

當我雙擊它,它只是帶我到我建立的按鈕 – CrimsonK9

1

製成,因爲它不是一個成員變量。讓一個和它的作品

JButton ButtonAdd = new JButton("Addition");裏面是另一種方法,因此它不是你的動作監聽可見