GUI目的:
用户应该能够在数字字段中输入一个数字,然后单击方形按钮。单击按钮后,程序将计算输入数字的平方,并将其显示在Square字段中。
我的问题: 我究竟如何传递输入的数字以在ActionListener类中使用?
#eceeef
答案 0 :(得分:0)
这里有几个选项:
NumberField
和Square
字段都传递到bhandler's
类构造函数中; ActionListener
实现为ButtonDemo
类的内部类。在这种情况下,您可以访问父类私有字段; SquareButton.addActionListener(e -> this::handleSquareButtonClicked);
然后将以下方法添加到ButtonDemo类:
private void handleSquareButtonClicked(ActionEvent event)
{
<your event handling coded here.>
}
以下是使用lambdas的代码的工作示例:
package examples;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class ButtonDemo extends JFrame
{
private JButton squareButton;
private JButton resetButton;
private JLabel numberLabel;
private JLabel squareLabel;
private JTextField numberField;
private JTextField squareField;
public ButtonDemo()
{
Container container=getContentPane();
container.setLayout(new FlowLayout());
Panel panel1= new Panel();
Panel panel2= new Panel();
Panel panel3 = new Panel();
panel1.setLayout(new FlowLayout());
squareButton = new JButton("Square");
resetButton = new JButton("Reset");
numberLabel = new JLabel("Number");
squareLabel = new JLabel("Square");
numberField = new JTextField();
numberField.setColumns(8);
squareField = new JTextField();
squareField.setColumns(8);
panel3.add(panel1);
panel3.add(panel2);
panel1.add(numberLabel);
panel1.add(squareLabel);
panel1.add(numberField);
panel1.add(squareField);
panel2.add(squareButton);
panel2.add(resetButton);
container.add(panel1);
container.add(panel2);
container.add(panel3);
squareButton.addActionListener(e -> handleSquareButtonClick(e));
resetButton.addActionListener(e -> handleresetButtonClick(e));
setSize(500,500);
setVisible(true);
}
private void handleresetButtonClick(ActionEvent e)
{
this.numberField.setText(null);
this.squareField.setText(null);
}
private void handleSquareButtonClick(ActionEvent e)
{
try
{
double number = Double.parseDouble(this.numberField.getText());
this.squareField.setText(String.valueOf(number * number));
}
catch (NumberFormatException ex)
{
System.out.println(ex.getMessage());
}
}
public static void main(String args[])
{
ButtonDemo application = new ButtonDemo();
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}//end of class Buttondemo
请注意,我已重命名一些变量以遵守Java命名约定。
答案 1 :(得分:0)
在用于附加侦听器的ButtonDemo构造函数中,不需要将侦听器附加到文本字段,只是对于这样的按钮:
SquareButton.addActionListener(new bhandler1(Integer.valueOf(NumberField.getText())));
在处理程序类中添加一个像这样的构造函数
private class bhandler implements ActionListener
{
int userIput ;
public bhandler(int userInput){
this.userInput = userInput ;
}
public void actionPerformed(ActionEvent event)
{
if(event.getSource() == SquareButton)
{
// Do what ever you want with userInput
}
}
}