1. java自定义事件,线程a如何每一秒钟触发一个事件,然后另一个线程b监听之,并作出反应
思路,在线程b的操作中调用a.wait(),线程a中触发的事件后面添加notify(),则在b执行到a.wait()的时候,回b等待a,a执行到notify(),通知a的等答待列表中的b线程进入锁池,此时b有机会继续执行,这样就打到了线程b监听a执行完事件
2. 如何实现让Java Label控件触发事件
实现MouseListener接口.
新增一个专门的"鼠标监听器"类,或者直接在你现有的类中实现"鼠标监听器".具体做法是在类声明语句中 MouseListener.如下:
public class MouseAdp implements MouseListener{
public MouseAdp(){}
public void mouseClicked(MouseEvent e) {
/**鼠标点击事件(包括按下和弹起两个动作)处理方法.**/
System.out.println("你点了我!");
}
public void mouseEntered(MouseEvent e) {
/**鼠标移到组件上方法时事件处理方法.**/}
public void mouseExited(MouseEvent e) {
/**鼠标移开组件时事件处理方法.**/}
public void mousePressed(MouseEvent e) {
/**鼠标在组件上按下(但没弹起)时事件处理方法.**/}
public void mouseReleased(MouseEvent e) {
/**鼠标在组件上弹起事件处理方法.**/}
}
然后在你的JLabel实例上,作用这个监听器,如:
JLabel lab = new JLabel("点我");
lab.addMouseListener(new MouseAdp());
3. java swing 怎么用一个监视器 监视2个窗口中同名按钮(各一个),触发不同事件(执行不同代码)
package实验;
importjavax.swing.*;importjava.awt.event.*;
publicclasshaha{
publicstaticvoidmain(String[]args){
//调用c来启动
newc();
}
}
classaextendsJFrame{
//第一个按钮
JButtons=newJButton("ha");
a(){
this.setTitle("a!");
this.setVisible(true);
this.setLayout(null);
this.setBounds(100,100,600,600);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.add(s);
s.setBounds(100,100,100,50);
}
}
classbextendsJFrame{
//第二个按钮
JButtons=newJButton("ha");
b(){
this.setTitle("b!");
this.setVisible(true);
this.setLayout(null);
this.setBounds(100,100,600,600);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.add(s);
s.setBounds(100,100,100,50);
}
}
{
//启动a,b
aaa=newa();
bbb=newb();
c(){
//为两个按钮加监听器
aa.s.addActionListener(this);
bb.s.addActionListener(this);
}
publicvoidactionPerformed(ActionEvente){
//如果是a的按钮
if(e.getSource()==aa.s){
System.out.println("我点了a的s");
}
//如果是b的按钮
if(e.getSource()==bb.s){
System.out.println("我点了b的s");
}
}
}
4. java按钮触发事件问题
把另一个组件的事件写进按钮的监听器里。
JButtonbutton=newJButton();
button.addActionListener(e->{
//组件要做的动作写在这里
});
5. java 自定义事件的触发及监听
JAVA事件响应机制
1,先自定义一个事件
public class MyEvent extends java.util.EventObject{
public MyEvent(Object source)
{
super(source);
}
}
2,再自定义一个监听器
public class MyListener implements java.util.EventListener{
//这里是当事件发生后的响应过程
public void EventActivated(MyEvent me)
{
System.out.println("事件已经被触发");
}
}
3,以下这个类为触发事件的事件源
public class MyObject {
private Vector vectorListeners=new Vector();
public synchronized void addMyListener(MyListener ml)
{
vectorListeners.addElement(ml);
}
public synchronized void removeMyListener(MyListener ml)
{
vectorListeners.removeElement(ml);
}
protected void activateMyEvent()
{
Vector tempVector=null;
MyEvent e=new MyEvent(this);
synchronized(this)
{
tempVector=(Vector)vectorListeners.clone();
for(int i=0;i<tempVector.size();i++)
{
MyListener ml=(MyListener)tempVector.elementAt(i);
ml.EventActivated(e);
}
}
}
//定义一个公用方法用于触发事件
public void test()
{
activateMyEvent();
}
}
4,测试类
public class Test {
public static void main(String[] args)
{
MyObject mo=new MyObject();
//注册该事件
mo.addMyListener(new MyListener());
//触发该事件
mo.test();
}
}
6. JAVA里 鼠标点击按钮后,触发事件,需要ActionEvent事件。关键是点击时需
//创建按钮
CreateJButton chooserJButton = new CreateJButton();
EventDeal eventDeal = new EventDeal();
//添加监听事件
chooserJButton.addActionListener(eventDeal );
//监听事件的实现类
public class EventDeal implements ActionListener {
//必须重写此方法,对按钮进行操作后系统会自动调用此方法
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
//调用你自己想要调用的方法
initEvent(jTextField);
}
public void initEvent(JTextField jTextField){
System.out.println("调用到方法")
}
}
7. java中swing的问题,关于按钮下面也有按钮时候事件的触发
按钮是我用label模仿的,button上添加事件后没法触发底层的鼠标事件,不知道如何解决,下面是我实现的代码,拖动的动画效果还没想出好的办法, 里面有获取屏幕高宽的方法,可以实现panel居中,button相对于屏幕坐标的方法是在事件里调用e.getXOnScreen();e.getYOnScreen()这两个方法:
public class Test {
public static void main(String[] args)
{
new Test().new MyFrame();
}
class MyFrame extends JFrame{
JLabel testBtn = new JLabel("test:");
int x;//x坐标
int y;//y坐标
public MyFrame(){
Dimension ss = Toolkit.getDefaultToolkit().getScreenSize();//获取屏幕大小
//获取内边距
Insets screenInsets = Toolkit.getDefaultToolkit().getScreenInsets(this.getGraphicsConfiguration());
int taskBarHeight = screenInsets.bottom; //获取底部 菜单栏高度
setBounds(ss.width/10, (ss.height-taskBarHeight)/10, ss.width/5*4, (ss.height-taskBarHeight)/5*4);
setLayout(null);
testBtn.setBounds(0, 0, 150, 30);
testBtn.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
addMouseListener(new MouseAdapter() {
boolean flag = false;
int xMax;
int xMin;
int yMax;
int yMin;
@Override
public void mousePressed(MouseEvent e) {
System.out.println("x="+e.getX()+";y="+e.getY());
xMax = testBtn.getX()+testBtn.getWidth();
xMin = testBtn.getX();
//这里加了个30是标题栏的高度,如果有目录栏,还需要加
yMax = testBtn.getY()+testBtn.getHeight()+30;
yMin = testBtn.getY();
//鼠标点下位置为按钮部分
System.out.println(e.getX()+";"+e.getY());
System.out.println(xMin+";"+xMin);
System.out.println(yMin+";"+yMin);
System.out.println(e.getX()>xMin&&e.getX()<xMax&&e.getY()<yMax&&e.getY()>yMin);
if(e.getX()>xMin&&e.getX()<xMax&&e.getY()<yMax&&e.getY()>yMin){
flag =true;
testBtn.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
testBtn.setLocation(e.getX()-testBtn.getWidth()/2, e.getY()-30-testBtn.getHeight()/2);
}else{
flag =false;
}
}
@Override
public void mouseReleased(MouseEvent e) {
if(flag ==true){
testBtn.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
testBtn.setLocation(e.getX()-testBtn.getWidth()/2, e.getY()-30-testBtn.getHeight()/2);
}
}
});
add(testBtn);
setVisible(true);
}
}
}
8. 大侠们!!怎样在java文本框中触发回车事件
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
{
publicProgram(){
initComponets();
}
protectedvoidinitComponets(){
Actionaction=newAbstractAction(){
@Override
publicvoidactionPerformed(ActionEvente){
JOptionPane.showMessageDialog(null,"触发回车事件","提示",JOptionPane.PLAIN_MESSAGE);
}
};
JTextFieldjTextField=newJTextField(10);
jTextField.addActionListener(action);
getContentPane().setLayout(newFlowLayout());
getContentPane().add(jTextField);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setBounds(50,50,200,200);
}
publicstaticvoidmain(String[]args){
newProgram();
}
}