- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我目前正在完成一项任务。我必须在框架上显示一组与鼠标相关的坐标。我不允许使用 Swing 组件。当使用鼠标而不点击时,文本应该是红色的。单击并拖动鼠标后,文本应为黑色。在这两种情况下,文本都应跟随鼠标。我可以让文本改变颜色,我可以让它显示适当的信息。当我尝试在 MouseMoved 和 MousedDragged 中设置标签的位置时,它无法识别我何时拖动。如果我为标签取出一个或另一个设置位置,另一个就可以正常工作。我究竟做错了什么?我正在参加运行类(class),我会把它包括在内。主类只是实例化我的运行者类的一个对象。
import java.awt.Button;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.*;
import java.awt.Rectangle ;
import java.awt.Label;
import java.awt.Color;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
class Proj06Runner extends Frame
{
//Proj06Runner Constructor
public Proj06Runner() {
System.out.println("Proj06");
System.out.println("I certify that this program is my own work and is not the work of others. ");
System.out.println("I agree not to share my solution with others.");
System.out.println("Eric Jackson.");
GUI gui = new GUI();//instantiate a GUI
}}
//End Proj06Runner Class
//________________________________________________________________________
class GUI extends Frame {
public GUI()//constructor
{
Rectangle bounds = this.getBounds();
//Create Frame
Frame displayWindow = new Frame("Eric Jackson");
//Set size of Frame
displayWindow.setSize(300,200);
displayWindow.setLayout(null);
displayWindow.setLocation(30 + bounds.x, 30 + bounds.y);
//Create Top button
Button TopButton = new Button("This Button does nothing");
TopButton.setBounds(7+bounds.x,30+bounds.y,285,25);
displayWindow.add(TopButton);
//Create Left button
Button LeftButton = new Button("Button");
LeftButton.setBounds(7+bounds.x,54+bounds.y,50,122);
displayWindow.add(LeftButton);
//Create Textfield
TextField myTextField=new TextField("This TextField does nothing");
myTextField.setBounds(7+bounds.x,175+bounds.y,285,22);
displayWindow.add(myTextField);
//Create Label to display coord text
Label myLabel=new Label();
myLabel.setBounds(50,50,100,20);
myLabel.setForeground(Color.red);
myLabel.setText(" ");
displayWindow.add(myLabel);
displayWindow.addWindowListener( new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
} );
displayWindow.addMouseMotionListener(new MyMouseMotionProcessor(myLabel));
displayWindow.addMouseListener(new MyMouseProcessor(myLabel));
displayWindow.setVisible(true);
}
}
//End GUI Definition
//=========================================================
//=========================================================
//This class recognizes mousePressed(). This method is
// used to determine the starting position of the mouse
// pointer.
class MyMouseProcessor extends MouseAdapter{
Label theLabel;
int MouseX, MouseY;
//Constructor
MyMouseProcessor( Label inLabel){
//save references to the input objects
theLabel = inLabel;
}//end constructor
public void mousePressed(MouseEvent e){
}//end mousePressed()
}//end MyMouseProcessor
//=======================================================
class MyMouseMotionProcessor extends MouseMotionAdapter{
Label theLabel;
int MouseX, MouseY;
//Constructor
MyMouseMotionProcessor(Label inLabel){
//save incoming object reference
theLabel = inLabel;
}// end constructor
public void mouseDragged(MouseEvent e){
System.out.println("Drag = " + e);
MouseX= e.getX()-2;
if (MouseX<0)
{
MouseX=0;
}
MouseY= e.getY()-15;
if (MouseY <0)
{
MouseY=0;
}
//move label to the new location
theLabel.setLocation(MouseX,MouseY);
theLabel.setForeground(Color.black);
String coordtextClick = MouseX+" , " + MouseY;
theLabel.setText(coordtextClick);
}//end mouseDragged()
public void mouseMoved(MouseEvent e){
System.out.println("Move = " + e);
theLabel.setForeground(Color.red);
MouseX= e.getX()-2;
if (MouseX<0)
{
MouseX=0;
}
MouseY= e.getY()-4;
if (MouseY <0)
{
MouseY=0;
}
String coordtext = MouseX+" , " + MouseY;
theLabel.setLocation(MouseX,MouseY);
theLabel.setText(coordtext);
}//
}//end class MyMouseMotionProcessor
最佳答案
同时使用mouseDragged
和mouseMoved
没有问题。他们工作得很好。问题在于您为 theLabel
设置的位置。
问题:问题是,当您在 mouseMoved
方法中设置 theLabel
的位置时,theLabel
正好位于鼠标指针下方。所以你不能创建一个 healthy mouseDrag 手势,它应该发生在你的 displayWindow
组件上。换句话说,您的 mouseDrag 被应用到 theLabel
本身而不是 displayWindow
,因为 theLabel
位于鼠标指针位于 displayWindow
的顶部。
我怎么知道的?我只是用了一个老把戏!我刚刚为 theLabel
设置了背景颜色:
myLabel.setBackground(Color.lightGray);
这帮助我了解了 myLabel
所在的位置,从而解决了问题!
解决方案:解决方案是为 theLabel
设置一个不在鼠标指针下方的位置。这将有助于从鼠标位置启动健康的 mouseDrag。像这样:
public void mouseDragged(MouseEvent e) {
System.out.println("Drag = " + e);
MouseX = e.getX() + 5; // <- note here
if (MouseX < 0) {
MouseX = 0;
}
MouseY = e.getY() - 15; // <- note here
if (MouseY < 0) {
MouseY = 0;
}
// move label to the new location
theLabel.setLocation(MouseX, MouseY);
theLabel.setForeground(Color.black);
String coordtextClick = MouseX + " , " + MouseY;
theLabel.setText(coordtextClick);
}// end mouseDragged()
public void mouseMoved(MouseEvent e) {
System.out.println("Move = " + e);
theLabel.setForeground(Color.red);
MouseX = e.getX() + 5; // <- note here
if (MouseX < 0) {
MouseX = 0;
}
MouseY = e.getY() - 15; // <- note here
if (MouseY < 0) {
MouseY = 0;
}
String coordtext = MouseX + " , " + MouseY;
theLabel.setLocation(MouseX, MouseY);
theLabel.setText(coordtext);
}//
希望这对您有所帮助!
关于java - MouseDragged 有效或 mouseMoved 有效,但不能同时有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51129968/
@Override public Shape getShape() { final Rectangle2D.Double result = new Rectangle2D.Do
我们目前正在修复一个项目,该项目必须在下周完成,所以我们的时间已经不多了(别担心,我想说的是我们没有时间浪费时间)我们所有的代码并重新开始......)。 我们有一个 JPanel (="page")
我创建了一个 Java 应用程序来添加/删除并在 JPanel 上显示随机数量的点。每次拖放都可以移动点。为了撤消最后的操作,我缓冲了这些点。 我的问题:如果通过“mouseDragged”移动一个点
我如何知道从 mouseDragged 事件中按下的按钮? 我在 mouseDragged() 中遇到问题,因为接收到的 MouseEvent 为 getButton() 返回 0。我对鼠标位置没有问
拖动鼠标后释放鼠标时是否应该调用 mouseReleased() 事件? 我需要调用 mouseReleased() 来重置 mouseDragged() 中使用的一些变量,但它似乎从未被调用。 最佳
我正在构建一个文本编辑器,并尝试添加使用行号边距选择行的功能。我当前的方法是使用 mouseDragged 来更新所选行。当进行缓慢的鼠标移动时,这工作得很好,但是当进行更快的移动时,选择无法跟上并且
所以我使用 knob.js 创建两个表盘,一个在另一个里面。外表盘代表一本书的累积评分,即所有评分的平均值。这个外层表盘有 data-readOnly="true" 并且它的值在这些表盘的公共(pub
我正在尝试制作一个 SpriteKit 游戏,玩家可以在其中拖动 Sprite 组,但我不知道如何让 Sprite 跟随鼠标光标。使用 SpriteKit 样板,我得到了这个: 以下是我如何移动“He
我有 2 个 NSView 子类,它们是公共(public) super View 的 subview 。它们不重叠,并且都拦截鼠标拖动的调用。当我从一个子类拖动到另一个子类时,即使我在整个屏幕上拖动
我会直接提出问题。如何为我的应用程序实现一个系统,让我在按住鼠标左键的同时为下面显示的这些矩形着色?当释放时,它会停止着色。我在互联网上搜索,但我仍然无法理解这些 MouseEvents 是如何工作的
我有一个程序,可以通过单击和拖动在屏幕上移动图像。唯一的问题是,当我单击图像并开始在面板上拖动它时,图像首先跳转到鼠标光标的位置。如何防止这种情况发生,以便无论我单击图像的何处,图像都会简单地移动?我
谁能告诉我如何将位置 X 和 Y 返回到我的 WindowController NSTextField(testTextX 和 testTextY)? 我以编程方式创建了一个 windowContro
如何通过 mouseDragged 在 JPanel 上进行铅笔绘图? 我有一个 JPanel,我想在其中使用鼠标进行绘制,因此每当我在该 JPanel 上拖动鼠标时,都会为每个 (x,y) 绘制一个
完成创建自定义滚动条,问题是: addMouseMotionListener(new MouseMotionAdapter() { @Override public void mous
我已经编写了如下定义的 MouseListener,这样我就可以移动 JButton 来重新排序 JPanel 中的组件。 JPanel 位于 JScrollPane 中,因此当添加多个组件时,它们可
我正在尝试弄清楚如何在我的事件中访问使用 paintComponent 绘制的不同图像(在作业中不允许使用 JLabels)。 拖动时,我只想通过鼠标拖动移动一个图像,而且我似乎无法使用 e.getS
我目前正在将一个应用程序(或更准确地说,一个 VST 插件)从 Windows 移植到 OSX。我对 OSX 编程有点陌生,但我使用的是通过 HICocoaCreateView 添加到 Carbon
当我拖动鼠标时,绘制或设置 JPanel 大小时出现问题,我设置的单击位置和大小取决于拖动位置(X 和 Y)绘制可调整大小的矩形(JPanel)。 private void panelMouseDra
我正在尝试为 JTable 编写自定义的拖放行为,但无法接收 MOUSE_DRAGGED 事件。我想问题是 native DnD 操作消耗了事件(如 mouseDragged 的 javadoc 中所
我正在创建一个程序,您可以在其中在面板上绘制(线条、椭圆形或矩形)并指定颜色、宽度、填充等。我有一个实现 MouseMotionListener 和 MouseListener 的 JPanel 类。
我是一名优秀的程序员,十分优秀!