求助使用匿名内部类实现事件处理

小白也疯狂 2014-07-12 03:36:44

// frame 里有一个jtextfield 和一个button ,当点击按钮后,实现把编辑框里的内容变为窗口标题
// 问题是在响应方法里如何获取frame这个对象。
button.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {

}
});
...全文
368 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
小白也疯狂 2014-07-14
  • 打赏
  • 举报
回复
按钮有焦点才行。 看看 JRootPane的setDefaultButton方法[/quote] 当我在编辑框中编辑时,编辑框具有焦点。按钮没有焦点,怎么做到按下回车启动按钮?
huntor 2014-07-14
  • 打赏
  • 举报
回复
引用 5 楼 u010749411 的回复:
[quote=引用 2 楼 huntor 的回复:]
final JFrame frame = new JFrame("...");
final JTextField input = new JTextField();
final JButton click = new JButton("Update Title");
... // add component to frame
click.addActionListener(new ActionListener(){
    @Override public void actionPerformed(ActionEvent e){
        frame.setTitle(input.getText());
    }
});
求助为按钮设置快捷键,我想为一个按钮设置回车为快捷键,不需要按alt的那种,下面尝试为何失败了,求指导
Action sendMessege = new AbstractAction() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				displayArea.append(editArea.getText()+"\n");
				editArea.setText("");
				editArea.requestFocus();
			}
		};
		
		sendButton.addActionListener(sendMessege);
		sendButton.registerKeyboardAction(sendMessege, 
				KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0), JComponent.WHEN_IN_FOCUSED_WINDOW);
				
		/*这是另一种方法。也没成功
		InputMap inputMap = sendButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
		inputMap.put(KeyStroke.getKeyStroke((char)(KeyEvent.VK_ENTER)), "send");
		sendButton.getActionMap().put("send", sendMessege);
		
		sendButton.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				
			}
		});
		*/
[/quote]按钮有焦点才行。 看看 JRootPane的setDefaultButton方法
小白也疯狂 2014-07-14
  • 打赏
  • 举报
回复
引用 2 楼 huntor 的回复:
final JFrame frame = new JFrame("...");
final JTextField input = new JTextField();
final JButton click = new JButton("Update Title");
... // add component to frame
click.addActionListener(new ActionListener(){
    @Override public void actionPerformed(ActionEvent e){
        frame.setTitle(input.getText());
    }
});
求助为按钮设置快捷键,我想为一个按钮设置回车为快捷键,不需要按alt的那种,下面尝试为何失败了,求指导
Action sendMessege = new AbstractAction() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				displayArea.append(editArea.getText()+"\n");
				editArea.setText("");
				editArea.requestFocus();
			}
		};
		
		sendButton.addActionListener(sendMessege);
		sendButton.registerKeyboardAction(sendMessege, 
				KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0), JComponent.WHEN_IN_FOCUSED_WINDOW);
				
		/*这是另一种方法。也没成功
		InputMap inputMap = sendButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
		inputMap.put(KeyStroke.getKeyStroke((char)(KeyEvent.VK_ENTER)), "send");
		sendButton.getActionMap().put("send", sendMessege);
		
		sendButton.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				
			}
		});
		*/
WuBill 2014-07-13
  • 打赏
  • 举报
回复
进来复习一下基础知识!
小白也疯狂 2014-07-12
  • 打赏
  • 举报
回复
引用 1 楼 u010005508 的回复:
以下代码可供你参考下:主要是局部内部类如何访问外部类的成员变量、局部变量以及引用外部类本身 1、frame属于某个类的成员变量时

package swing;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;

public class Demo7 {
	private JFrame jf=new JFrame("test");
	private JButton jb=new JButton("按下");
	public void init()
	{
		jb.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				jf.setTitle("gg");//jf和jb同属于某个类的成员变量,则直接使用其名字jf即可
			}
		});
		jf.add(jb);
		jf.pack();
		jf.setVisible(true);
	}
	public static void main(String[] args) {
		new Demo7().init();
	}
}
2、frame变量同属于某个方法的局部变量时
package swing;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;
public class Demo6 {
	public static void main(String[] args) {
		final JFrame jf=new JFrame("test");
		JButton jb=new JButton("按下");
		jb.addMouseListener(new MouseAdapter() {
					public void mouseClicked(MouseEvent e) {
						jf.setTitle("gg");//jf和jb是同属于某个方法的局部变量,则须将jf声明为final,然后直接使用其名字jf即可
					}
				});
		jf.add(jb);
		jf.pack();
		jf.setVisible(true);
	}

}
3、button属于frame的成员变量时
package swing;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;

public class Demo5 {
	public static void main(String[] args) {
		JFrame jf=new MyJFrame("test");
		jf.pack();
		jf.setVisible(true);
	}

}

class MyJFrame extends JFrame
{
	private JButton jb=new JButton("按下");
	public MyJFrame(String str)
	{
		super(str);
		jb.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				MyJFrame.this.setTitle("gg"); //jb属于MyFrame类的成员变量,则通过MyJFrame.this方式引用MyFrame类的当前实例
			}
		});
		this.add(jb);
	}
}
多谢提醒。我想我该好好看书了、这都是基础语法。
huntor 2014-07-12
  • 打赏
  • 举报
回复
final JFrame frame = new JFrame("...");
final JTextField input = new JTextField();
final JButton click = new JButton("Update Title");
... // add component to frame
click.addActionListener(new ActionListener(){
    @Override public void actionPerformed(ActionEvent e){
        frame.setTitle(input.getText());
    }
});
highnewrain 2014-07-12
  • 打赏
  • 举报
回复
以下代码可供你参考下:主要是局部内部类如何访问外部类的成员变量、局部变量以及引用外部类本身 1、frame属于某个类的成员变量时

package swing;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;

public class Demo7 {
	private JFrame jf=new JFrame("test");
	private JButton jb=new JButton("按下");
	public void init()
	{
		jb.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				jf.setTitle("gg");//jf和jb同属于某个类的成员变量,则直接使用其名字jf即可
			}
		});
		jf.add(jb);
		jf.pack();
		jf.setVisible(true);
	}
	public static void main(String[] args) {
		new Demo7().init();
	}
}
2、frame变量同属于某个方法的局部变量时
package swing;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;
public class Demo6 {
	public static void main(String[] args) {
		final JFrame jf=new JFrame("test");
		JButton jb=new JButton("按下");
		jb.addMouseListener(new MouseAdapter() {
					public void mouseClicked(MouseEvent e) {
						jf.setTitle("gg");//jf和jb是同属于某个方法的局部变量,则须将jf声明为final,然后直接使用其名字jf即可
					}
				});
		jf.add(jb);
		jf.pack();
		jf.setVisible(true);
	}

}
3、button属于frame的成员变量时
package swing;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;

public class Demo5 {
	public static void main(String[] args) {
		JFrame jf=new MyJFrame("test");
		jf.pack();
		jf.setVisible(true);
	}

}

class MyJFrame extends JFrame
{
	private JButton jb=new JButton("按下");
	public MyJFrame(String str)
	{
		super(str);
		jb.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				MyJFrame.this.setTitle("gg"); //jb属于MyFrame类的成员变量,则通过MyJFrame.this方式引用MyFrame类的当前实例
			}
		});
		this.add(jb);
	}
}

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧