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();
}
}