gpt4 book ai didi

java - 为什么在 Linux 中,JButton、JLabel 鼠标点击丢失或被忽略?它没有按照程序应该做的去做

转载 作者:IT王子 更新时间:2023-10-29 00:53:56 30 4
gpt4 key购买 nike

我有这个 SSCCE,其中 Jbutton 被按下时它没有做任何事情,而且如果我在 JLabel 中单击它也会失败,它不可靠,很多点击都被错过了。但是我检查了一些其他发行版相同的代码,并且它有效。仅在 Dell Inspiron 触摸屏 PC 中,它不工作。

  • 我点击了 JButton 100 次,但它显示了 2 次
  • 我点击了 JLabel 100 次,但它显示了 0 次
  • 我也点击了 JFrame 100 次,但它显示按下了 0 次

运行:

$ uname -a
Linux sun-Inspiron-One-2320 3.2.0-29-generic #46-Ubuntu SMP Fri Jul 27 17:03:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 12.04.1 LTS
Release: 12.04
Codename: precise

$ java -version
java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.5) (6b24-1.11.5-0ubuntu1~12.04.1)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)

$ export DISPLAY=:0.0 && java -cp YumYumYum.jar UnitTest.MouseMethods
The JButton was clicked...
The JButton was clicked...

复制粘贴:

package UnitTest;

import java.awt.FlowLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class MouseMethods implements MouseListener {

private JLabel label = new JLabel("This is a JLabel");
private JButton button = new JButton("This is a JButton");

public MouseMethods() {
JFrame frame = new JFrame("MouseMethods");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout());

label.addMouseListener(this);
button.addMouseListener(this);

frame.add(label);
frame.add(button);
frame.setVisible(true);
frame.pack();
}

public void mouseClicked(MouseEvent e) {
if (e.getSource().equals(button)) {
System.out.println("The JButton was clicked...");
} else if (e.getSource().equals(label)) {
System.out.println("The JLabel was clicked...");
} else {
System.out.println("Something else was clicked...");
}
}

public void mouseEntered(MouseEvent e) {
}

public void mouseExited(MouseEvent e) {
}

public void mousePressed(MouseEvent e) {
}

public void mouseReleased(MouseEvent e) {
}

public static void main(String args[]) {
new MouseMethods();
}
}

跟进:

$ uname -a
Linux sun-Inspiron-One-2320 3.2.0-29-generic #46-Ubuntu SMP Fri Jul 27 17:03:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

$ apt-cache search linux-image
alsa-base - ALSA driver configuration files
linux-image - Generic Linux kernel image.
linux-image-3.2.0-23-generic - Linux kernel image for version 3.2.0 on 64 bit x86 SMP
linux-image-3.2.0-23-virtual - Linux kernel image for version 3.2.0 on 64 bit x86 Virtual Guests
linux-image-extra-3.2.0-23-virtual - Linux kernel image for version 3.2.0 on 64 bit x86 Virtual Guests
linux-image-extra-virtual - Linux kernel extra modules for virtual machines
linux-image-generic - Generic Linux kernel image
linux-image-server - Linux kernel image on Server Equipment.
linux-image-virtual - Linux kernel image for virtual machines
linux-virtual - Complete Linux kernel for virtual machines
linux-image-3.2.0-23-generic-pae - Linux kernel image for version 3.2.0 on 64 bit x86 SMP
linux-image-generic-pae - Generic Linux kernel image
linux-image-3.2.0-23-lowlatency - Linux kernel image for version 3.2.0 on x86/x86_64
linux-image-lowlatency - lowlatency Linux kernel image
linux-image-3.2.0-23-lowlatency-pae - Linux kernel image for version 3.2.0 on x86
linux-image-lowlatency-pae - lowlatency Linux kernel image
linux-image-3.2.0-24-generic - Linux kernel image for version 3.2.0 on 64 bit x86 SMP
linux-image-3.2.0-24-virtual - Linux kernel image for version 3.2.0 on 64 bit x86 Virtual Guests
linux-image-3.2.0-25-generic - Linux kernel image for version 3.2.0 on 64 bit x86 SMP
linux-image-3.2.0-25-virtual - Linux kernel image for version 3.2.0 on 64 bit x86 Virtual Guests
linux-image-3.2.0-26-generic - Linux kernel image for version 3.2.0 on 64 bit x86 SMP
linux-image-3.2.0-26-virtual - Linux kernel image for version 3.2.0 on 64 bit x86 Virtual Guests
linux-image-3.2.0-27-generic - Linux kernel image for version 3.2.0 on 64 bit x86 SMP
linux-image-3.2.0-27-virtual - Linux kernel image for version 3.2.0 on 64 bit x86 Virtual Guests
linux-image-3.2.0-29-generic - Linux kernel image for version 3.2.0 on 64 bit x86 SMP
linux-image-3.2.0-29-virtual - Linux kernel image for version 3.2.0 on 64 bit x86 Virtual Guests
linux-image-3.2.0-30-generic - Linux kernel image for version 3.2.0 on 64 bit x86 SMP
linux-image-3.2.0-30-virtual - Linux kernel image for version 3.2.0 on 64 bit x86 Virtual Guests
linux-image-3.2.0-31-generic - Linux kernel image for version 3.2.0 on 64 bit x86 SMP
linux-image-3.2.0-31-virtual - Linux kernel image for version 3.2.0 on 64 bit x86 Virtual Guests
linux-image-3.2.0-32-generic - Linux kernel image for version 3.2.0 on 64 bit x86 SMP
linux-image-3.2.0-32-virtual - Linux kernel image for version 3.2.0 on 64 bit x86 Virtual Guests
linux-image-3.2.0-33-generic - Linux kernel image for version 3.2.0 on 64 bit x86 SMP
linux-image-3.2.0-33-virtual - Linux kernel image for version 3.2.0 on 64 bit x86 Virtual Guests
linux-image-3.5.0-18-generic - Linux kernel image for version 3.5.0 on 64 bit x86 SMP
linux-image-current-generic - Depends on the most recently released generic kernel image and headers.
linux-image-extra-3.2.0-24-virtual - Linux kernel image for version 3.2.0 on 64 bit x86 Virtual Guests
linux-image-extra-3.2.0-25-virtual - Linux kernel image for version 3.2.0 on 64 bit x86 Virtual Guests
linux-image-extra-3.2.0-26-virtual - Linux kernel image for version 3.2.0 on 64 bit x86 Virtual Guests
linux-image-extra-3.2.0-27-virtual - Linux kernel image for version 3.2.0 on 64 bit x86 Virtual Guests
linux-image-extra-3.2.0-29-virtual - Linux kernel image for version 3.2.0 on 64 bit x86 Virtual Guests
linux-image-extra-3.2.0-30-virtual - Linux kernel image for version 3.2.0 on 64 bit x86 Virtual Guests
linux-image-extra-3.2.0-31-virtual - Linux kernel image for version 3.2.0 on 64 bit x86 Virtual Guests
linux-image-extra-3.2.0-32-virtual - Linux kernel image for version 3.2.0 on 64 bit x86 Virtual Guests
linux-image-extra-3.2.0-33-virtual - Linux kernel image for version 3.2.0 on 64 bit x86 Virtual Guests
linux-image-generic-lts-quantal - Generic Linux kernel image
linux-image-hwe-generic - Depends on the generic hardware enablement kernel image and headers.
linux-image-3.2.0-24-generic-pae - Linux kernel image for version 3.2.0 on 64 bit x86 SMP
linux-image-3.2.0-25-generic-pae - Linux kernel image for version 3.2.0 on 32 bit x86 SMP
linux-image-3.2.0-26-generic-pae - Linux kernel image for version 3.2.0 on 32 bit x86 SMP
linux-image-3.2.0-27-generic-pae - Linux kernel image for version 3.2.0 on 32 bit x86 SMP
linux-image-3.2.0-29-generic-pae - Linux kernel image for version 3.2.0 on 32 bit x86 SMP
linux-image-3.2.0-30-generic-pae - Linux kernel image for version 3.2.0 on 32 bit x86 SMP
linux-image-3.2.0-31-generic-pae - Linux kernel image for version 3.2.0 on 32 bit x86 SMP
linux-image-3.2.0-32-generic-pae - Linux kernel image for version 3.2.0 on 32 bit x86 SMP
linux-image-3.2.0-33-generic-pae - Linux kernel image for version 3.2.0 on 32 bit x86 SMP
linux-image-3.2.0-33-lowlatency - Linux kernel image for version 3.2.0 on x86/x86_64
linux-image-3.2.0-33-lowlatency-pae - Linux kernel image for version 3.2.0 on x86


$ apt-get install linux-image-3.2.0-33-generic
$ init 6
$ uname -a
Linux sun-Inspiron-One-2320 3.2.0-33-generic #52-Ubuntu SMP Thu Oct 18 16:29:15 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

最佳答案

在 Ubuntu 12.04/OpenJDK 上按预期工作。

注意事项:

  • Swing GUI 对象应该event dispatch thread 上构造和操作.

  • 考虑 extends MouseAdapterimplements MouseListener .

  • 使用 ActionListener ,例如 Action , 超过 MouseListener用于按钮。

  • 框架内容 Pane 上的监听器触发最终 else条款。

附录:请注意覆盖 mouseClicked()可能需要某些与平台相关的驱动程序和控制面板设置,例如双击计时和鼠标按钮去抖动。覆盖 mousePressed()mouseReleased()相反。

$ uname -aLinux vm 3.2.0-33-generic-pae #52-Ubuntu SMP    Thu Oct 18 16:39:21 UTC 2012 i686 i686 i386 GNU/Linux$ lsb_release -aNo LSB modules are available.Distributor ID: UbuntuDescription:    Ubuntu 12.04.1 LTSRelease:    12.04Codename:   precise$ java -versionjava version "1.6.0_24"OpenJDK Runtime Environment (IcedTea6 1.11.5) (6b24-1.11.5-0ubuntu1~12.04.1)OpenJDK Client VM (build 20.0-b12, mixed mode, sharing)

Code:

import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class MouseMethods extends MouseAdapter {

private JLabel label = new JLabel("This is a JLabel");
private JButton button = new JButton("This is a JButton");

public MouseMethods() {
JFrame frame = new JFrame("MouseMethods");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout());

label.addMouseListener(this);
button.addMouseListener(this);
frame.getContentPane().addMouseListener(this);

frame.add(label);
frame.add(button);
frame.pack();
frame.setVisible(true);
}

@Override
public void mousePressed(MouseEvent e) {
if (e.getSource().equals(button)) {
System.out.println("The JButton was clicked...");
} else if (e.getSource().equals(label)) {
System.out.println("The JLabel was clicked...");
} else {
System.out.println("Something else was clicked...");
}
}

public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {

@Override
public void run() {
new MouseMethods();
}
});
}
}

关于java - 为什么在 Linux 中,JButton、JLabel 鼠标点击丢失或被忽略?它没有按照程序应该做的去做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13520209/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com