【发布时间】:2019-11-13 02:13:30
【问题描述】:
我正在使用 IntelliJ IDEA 的表单编辑器并将 JLabel 绑定到我的 mouse_input 类。我的目标是在表单上获取鼠标的 x 和 y 坐标并将它们打印到标签上。一切都在膨胀,我的代码通常可以工作,我可以将 JLabel 文本设置为 x 和 y 的值,但只能在表单加载时设置一次。我一生都无法弄清楚如何在表单加载后定期更新值。我是 Java 和 IntelliJ 的新手,所以我很可能会遗漏一些简单的东西。这是我的代码。
package com.company;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import static javax.swing.JFrame.*;
public class mouse_input {
private JPanel mouse_pad;
private JLabel label;
private static int x;
private static int y;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run(){
displayJframe();
}
});
}
static void displayJframe(){
// Create blank content frame
JFrame frame = new JFrame("Mouse Input");
frame.setContentPane(new mouse_input().mouse_pad);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.validate();
// Add mouse motion listener
frame.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseDragged(MouseEvent e) {
// It doesn't like me deleting this
}
@Override
public void mouseMoved(MouseEvent e) {
x = e.getX();
y = e.getY();
frame.revalidate();
}
});
// Set cursor type
frame.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
// Display frame
frame.setVisible(true);
}
private void createUIComponents() {
label = new JLabel();
label.setText("X" + x + "Y" + y);
}
}
现在我做了一些研究,摸索了一下,发现我可能可以从头开始创建 JLabel,但我真的很想尝试看看我是否可以专门使用 IntelliJ 的 gui 编辑器,我还没有看到任何这种性质的东西。不过,我可能只是个大白痴。如有任何反馈,我将不胜感激。
【问题讨论】:
-
在
label.setText("X" + x + "Y" + y);中执行mouseMoved -
@ScaryWombat 这绝对是我的第一步,但唉
Non-static field, 'label' cannot be referenced from a static context.这确实是有道理的。绑定标签的非静态属性绝对是让它变得如此困难的原因。 -
static void displayJframe非静态,实例化一个mouse_input- 也被调用createUIComponents? -
好的,所以将
static void displayJframe更改为public void display Jframe可以让我做很多我以前无法做到的事情,比如将label.setText("X" + x + "Y" + y);移动到mouseMoved并调用createUIComponents(之前没有调用它) ,我无法从任何地方调用它)。但现在 main 不太喜欢 displayJframe ,我只剩下追逐静态和非静态片段。至于mouse_input,就像我说的,我是Java 新手,你介意告诉我如何正确实例化mouse_input?。 -
@Abra 我想我同意你的建议。下面的 ScaryWombat 代码看起来确实有效,但它无法满足我对这个小项目的主要目标之一,那就是专门使用编辑器。但是哦,好吧,我想在我牢牢掌握更多基础知识之后还有时间学习。谢谢你的建议。
标签: java swing user-interface intellij-idea jlabel