以下的一个构造方法中,b.addActionListener(this);这一语句的this指代的是什么??求解,语句都很简单
publicCalculatorPanel(){setLayout(newBorderLayout());display=newJTextField("0");displ...
public CalculatorPanel(){
setLayout(new BorderLayout());
display=new JTextField("0");
display.setEditable(false);
add(display,"Center");
ope=new JTextField(" ");
ope.setEditable(false);
add(ope,"West");
//创建菜单栏(暂时无实际意义)
JMenuBar bar=new JMenuBar();
add(bar,"North");
JMenu view=new JMenu("查看(V)");
JMenu edit=new JMenu("编辑(E)");
JMenu help=new JMenu("帮助(H)");
bar.add(view);
bar.add(edit);
bar.add(help);
JMenuItem newItem=new JMenuItem("标准型(V)");
JMenuItem newItem2=new JMenuItem("科学型(S)");
JMenuItem newItem3=new JMenuItem("退出(E)");
JMenuItem newItem4=new JMenuItem("关于..");
view.add(newItem);
view.add(newItem2);
view.add(newItem3);
help.add(newItem4);
newItem4.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null,"本程序由射手同学独立完成,请任何时候保留此句!");
}
});
newItem3.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
int res;
res=JOptionPane.showConfirmDialog(null, "确定退出?", "退出", JOptionPane.YES_NO_OPTION);
if(res==JOptionPane.YES_OPTION) System.exit(0);
}
});
JPanel p=new JPanel();
p.setLayout(new GridLayout(4,4));
String buttons="789/456*123-0.=+";
for (int i=0;i<buttons.length();i++)
addButton(p,buttons.substring(i,i+1));
add(p,"South");
}
private void addButton(Container c,String s){
JButton b=new JButton(s);
c.add(b);
//问题:以下语句这个this指代的是什么????
b.addActionListener(this);
}
public void actionPerformed(ActionEvent evt) {
String s=evt.getActionCommand();
if ('0'<=s.charAt(0)&&s.charAt(0)<='9'){
if(start)
display.setText(s);
else display.setText(display.getText()+s);
start=false;
}
else{
double x=Double.parseDouble(display.getText());
calculate(x);
op=s;
ope.setText(op);
start=true;
}
}
public void calculate(double n){
if(op.equals("+")) arg+=n;
else if (op.equals("-")) arg -=n;
else if (op.equals("*")) arg*=n;
else if (op.equals("/")) arg/=n;
else if (op.equals("=")) arg=n;
display.setText(""+arg);
}
} 展开
setLayout(new BorderLayout());
display=new JTextField("0");
display.setEditable(false);
add(display,"Center");
ope=new JTextField(" ");
ope.setEditable(false);
add(ope,"West");
//创建菜单栏(暂时无实际意义)
JMenuBar bar=new JMenuBar();
add(bar,"North");
JMenu view=new JMenu("查看(V)");
JMenu edit=new JMenu("编辑(E)");
JMenu help=new JMenu("帮助(H)");
bar.add(view);
bar.add(edit);
bar.add(help);
JMenuItem newItem=new JMenuItem("标准型(V)");
JMenuItem newItem2=new JMenuItem("科学型(S)");
JMenuItem newItem3=new JMenuItem("退出(E)");
JMenuItem newItem4=new JMenuItem("关于..");
view.add(newItem);
view.add(newItem2);
view.add(newItem3);
help.add(newItem4);
newItem4.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null,"本程序由射手同学独立完成,请任何时候保留此句!");
}
});
newItem3.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
int res;
res=JOptionPane.showConfirmDialog(null, "确定退出?", "退出", JOptionPane.YES_NO_OPTION);
if(res==JOptionPane.YES_OPTION) System.exit(0);
}
});
JPanel p=new JPanel();
p.setLayout(new GridLayout(4,4));
String buttons="789/456*123-0.=+";
for (int i=0;i<buttons.length();i++)
addButton(p,buttons.substring(i,i+1));
add(p,"South");
}
private void addButton(Container c,String s){
JButton b=new JButton(s);
c.add(b);
//问题:以下语句这个this指代的是什么????
b.addActionListener(this);
}
public void actionPerformed(ActionEvent evt) {
String s=evt.getActionCommand();
if ('0'<=s.charAt(0)&&s.charAt(0)<='9'){
if(start)
display.setText(s);
else display.setText(display.getText()+s);
start=false;
}
else{
double x=Double.parseDouble(display.getText());
calculate(x);
op=s;
ope.setText(op);
start=true;
}
}
public void calculate(double n){
if(op.equals("+")) arg+=n;
else if (op.equals("-")) arg -=n;
else if (op.equals("*")) arg*=n;
else if (op.equals("/")) arg/=n;
else if (op.equals("=")) arg=n;
display.setText(""+arg);
}
} 展开
展开全部
Swing中在实现implements ActionListener接口时,可以直接将事件写成
b.addActionListener(this);
那么它必定是重载了actionPerformed(),使用的时候直接
public void actionPerformed(ActionEvent arg0) {
JButton button = (JButton) arg0.getSource();
if (button.getText().equals(s)) {// 你上面的定义:JButton b=new JButton(s);你这里定义的s
//操作
}
}
所以上面的this,只能在实现ActionListener接口前提下使用。【作为对应事件的标识】
如果不实现ActionListener接口,上面的做法就等同于:
//JButton b=new JButton(s);
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
//操作。
}
});
b.addActionListener(this);
那么它必定是重载了actionPerformed(),使用的时候直接
public void actionPerformed(ActionEvent arg0) {
JButton button = (JButton) arg0.getSource();
if (button.getText().equals(s)) {// 你上面的定义:JButton b=new JButton(s);你这里定义的s
//操作
}
}
所以上面的this,只能在实现ActionListener接口前提下使用。【作为对应事件的标识】
如果不实现ActionListener接口,上面的做法就等同于:
//JButton b=new JButton(s);
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
//操作。
}
});
追问
不好意思,最近太忙了。 我大概明白了,那么如果ActionListener接口中的方法不止一个的话,还可以b.addActionListener(this);吗?也就是两个监听事件
追答
那当然可以啊。比如可以同时实现implements ActionListener,MouseListener接口。那么定义一个
Button jb=new Button("Submit");
jb.addActionListener(this);//触发事件。
public void actionPerformed(ActionEvent arg0) {
if(arg0.getActionCommand().trim().equals("Submit"))
{
//操作。
}
}
来自:求助得到的回答
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询