我以為我正確地實作了MouseListener,但是當我點擊畫布時,它并沒有到達System.out.println("Click registered");
我看過的所有教程都是按照我的方法來實作滑鼠監聽器。
程式編譯后,除了滑鼠監聽器外,一切都正常。
package ttt;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Frame extends JFrame implements MouseListener
{
public static Field field = new Field() 。
public static GAME game = new Game() 。
public static TTTCanvas tttcanvas = new TTTCanvas()。
static final long serialVersionUID = 1l;
private static final int width = 700;
private static final int height = 700;
public Frame()
{
setLayout(new BorderLayout()) 。
setResizable(false)。
setBounds(400, 400, width, height);
setTitle("Tic Tac Toe")。
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)。
setLocationRelativeTo(null)。
setVisible(true)。
add(ttcanvas)。
addMouseListener(this)。
}
public void mouseClicked(MouseEvent e)。
{
System.out.println("Click registered")。
int x = field.getFieldfromPixel(e.getX))。
int y = field.getFieldfromPixel(e.getY() );
game.updateField(x, y);
}
public void mouseEntered(MouseEvent e) {}。
public void mouseExited(MouseEvent e) {}。
public void mousePressed(MouseEvent e) {}。
public void mouseReleased(MouseEvent e){}。
}
uj5u.com熱心網友回復:
在你的tt畫布上添加mouselistener
。package ttt;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Frame extends JFrame implements MouseListener
{
public static Field field = new Field() 。
public static GAME game = new Game() 。
public static TTTCanvas tttcanvas = new TTTCanvas()。
static final long serialVersionUID = 1l;
private static final int width = 700;
private static final int height = 700;
public Frame()
{
setLayout(new BorderLayout()) 。
setResizable(false)。
setBounds(400, 400, width, height);
setTitle("Tic Tac Toe")。
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)。
setLocationRelativeTo(null)。
setVisible(true)。
add(ttcanvas)。
tttcanvas.addMouseListener(this); //changed here
}
public void mouseClicked(MouseEvent e)
{
System.out.println("Click registered")。
int x = field.getFieldfromPixel(e.getX))。
int y = field.getFieldfromPixel(e.getY() );
game.updateField(x, y);
}
public void mouseEntered(MouseEvent e) {}。
public void mouseExited(MouseEvent e) {}。
public void mousePressed(MouseEvent e) {}。
public void mouseReleased(MouseEvent e){}。
}
uj5u.com熱心網友回復:
當我洗掉時,對我來說很好用:
//add(ttcanvas);/span>
一個MouseEvent只被派發給一個組件。
你的TTTCanvas類必須也有一個MouseListner,所以它正在接收該事件。
不確定您的具體要求是什么,所以我猜您可以:
您的TTTCanvas類必須有一個MouseListner,以便接收事件。
- 為 TTTCanvas 類添加第二個 MouseListener,或者將兩個監聽器的邏輯合并為一個監聽器,或者
- 移除監聽器。
- 從 TTTCanvas 類中洗掉監聽器 。
一些代碼來演示我的答案:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Frame extends JFrame implements MouseListener
{
// public static Field field = new Field();
// public static Game game = new Game();.
// public static TTTCanvas tttcanvas = new TTTCanvas();.
// static final long serialVersionUID = 1l;
private static final int width = 700;
private static final int height = 700;
public Frame()
{
setLayout(new BorderLayout()) 。
setResizable(false)。
setBounds(400, 400, width, height);
setTitle("Tic Tac Toe")。
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)。
setLocationRelativeTo(null)。
setVisible(true)。
//add(ttcanvas);.
JPanel panel = new JPanel() 。
panel.setPreferredSize( new Dimension(700, 400) ) 。
panel.setBackground(Color.RED);
panel.addMouseListener( new MouseAdapter( )
{
public void mouseClicked(MouseEvent e)
{
System.out.println("panel listener")。
}
});
add(panel, BorderLayout.PAGE_START);
addMouseListener(this)。
}
public void mouseClicked(MouseEvent e)
{
System.out.println("frame listener")。
}
public void mouseEntered(MouseEvent e) {}。
public void mouseExited(MouseEvent e) {}。
public void mousePressed(MouseEvent e) {}。
public void mouseReleased(MouseEvent e) {}。
public static void main title function_">main(String[] args) throws Exception
{
java.awt.EventQueue.invokeLater(() -> new Frame() ) 。
}
- 如果你點擊紅色面板,你會看到 "面板監聽器",因為面板接收事件而不是框架。
- 如果你點擊灰色面板,你會看到 "框架監聽器",因為沒有其他組件被添加到框架BorderLayout的CENTER,所以框架會接收MouseEvent。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/310273.html
標籤:
上一篇:Popup中的導航問題以及如何使用setLocationRelativeto()。
下一篇:在Java中創建GUI中的延遲
