当前,当我右键单击SystemTray中的TrayIcon时,将显示PopupMenu。但是,当我在TrayIcon上单击鼠标左键时,我希望它执行相同的操作。
我以为可以通过在TrayIcon上使用mouseListener来完成此操作,但是我不知道在mouseClicked事件中调用哪种方法才能获得所需的结果。
icon = new TrayIcon(img, tooltip, popup);
icon.addMouseListener(
new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
popup.setEnabled(true);
}
});
当我在TrayIcon上单击鼠标左键时,使用setEnabled()方法不会使弹出菜单出现。它实际上没有明显的作用。我想知道应该在mouseClicked()主体中使用哪种方法,以使单击鼠标左键时弹出窗口显示出来。
基本上,在您的鼠标侦听器中,您需要确定按下了哪个按钮(以及可选的按下次数)。
关键代码段是这样的…
if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 1) { ... }
我还添加了一些其他代码,以确保弹出窗口不会覆盖任务栏,并且不会显示在屏幕的可视区域内(这是我的固有选择;)。
public class TestTrayIcon02 {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception ex) {
}
try {
final TrayIcon ti = new TrayIcon(ImageIO.read(getClass().getResource("/Smiley.png")), "Have a nice day");
final JPopupMenu popup = new JPopupMenu();
JMenuItem mi = new JMenuItem("Get me some");
mi.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
SystemTray.getSystemTray().remove(ti);
System.exit(0);
}
});
popup.add(mi);
ti.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 1) {
Rectangle bounds = getSafeScreenBounds(e.getPoint());
Point point = e.getPoint();
int x = point.x;
int y = point.y;
if (y < bounds.y) {
y = bounds.y;
} else if (y > bounds.y + bounds.height) {
y = bounds.y + bounds.height;
}
if (x < bounds.x) {
x = bounds.x;
} else if (x > bounds.x + bounds.width) {
x = bounds.x + bounds.width;
}
if (x + popup.getPreferredSize().width > bounds.x + bounds.width) {
x = (bounds.x + bounds.width) - popup.getPreferredSize().width;
}
if (y + popup.getPreferredSize().height > bounds.y + bounds.height) {
y = (bounds.y + bounds.height) - popup.getPreferredSize().height;
}
popup.setLocation(x, y);
popup.setVisible(true);
}
}
});
SystemTray.getSystemTray().add(ti);
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
}
public static Rectangle getSafeScreenBounds(Point pos) {
Rectangle bounds = getScreenBoundsAt(pos);
Insets insets = getScreenInsetsAt(pos);
bounds.x += insets.left;
bounds.y += insets.top;
bounds.width -= (insets.left + insets.right);
bounds.height -= (insets.top + insets.bottom);
return bounds;
}
public static Insets getScreenInsetsAt(Point pos) {
GraphicsDevice gd = getGraphicsDeviceAt(pos);
Insets insets = null;
if (gd != null) {
insets = Toolkit.getDefaultToolkit().getScreenInsets(gd.getDefaultConfiguration());
}
return insets;
}
public static Rectangle getScreenBoundsAt(Point pos) {
GraphicsDevice gd = getGraphicsDeviceAt(pos);
Rectangle bounds = null;
if (gd != null) {
bounds = gd.getDefaultConfiguration().getBounds();
}
return bounds;
}
public static GraphicsDevice getGraphicsDeviceAt(Point pos) {
GraphicsDevice device = null;
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice lstGDs[] = ge.getScreenDevices();
ArrayList<GraphicsDevice> lstDevices = new ArrayList<GraphicsDevice>(lstGDs.length);
for (GraphicsDevice gd : lstGDs) {
GraphicsConfiguration gc = gd.getDefaultConfiguration();
Rectangle screenBounds = gc.getBounds();
if (screenBounds.contains(pos)) {
lstDevices.add(gd);
}
}
if (lstDevices.size() > 0) {
device = lstDevices.get(0);
} else {
device = ge.getDefaultScreenDevice();
}
return device;
}
}
我设置了一个JPopupMenu,它将显示用户是否右键单击JList中的某个单元格,但现在必须先选择该单元格,才能显示JPopupMenu。我想知道如何在右键单击后选择该单元格,然后像现在一样显示JPopupMenu。当没有选择任何项目并且鼠标不在列表中的任何项目上时,我也会显示一个菜单。 代码:
我需要帮助创建一个div,当你点击一个按钮时,里面有自定义超文本标记语言的div会被创建。 如果这是可能的(很可能是),我正在制作一个邮箱。 谢谢!!!
我们正在IntelliJ中创建一个新项目,肯定有什么问题,因为当我们右键单击目录,选择new然后获得上下文菜单时,基于Java的选项不会显示出来。目前得到的东西像文件,一些HTML选项,XML选项。 编辑:答案是基本的:“当你意识到有些东西不起作用的时候,因为你没有点击‘应用’。:)当我们发现这一点时,我们自嘲得很开心
问题内容: 朋友你好,我试图显示我的Jave Gui应用程序中的记录,我做了一些代码,但是当我单击下一步按钮时,它显示了最后一条记录。还有什么其他方法可以查看之间的记录,请帮忙。 问题答案: 您需要将数据库代码与GUI代码分开。您还需要将您的应用程序分解为更小的,更容易编码的步骤。 这是您的应用程序在启动时需要做的事情: 打开与数据库的连接。 选择表Soil_det的所有键,然后将键保存在列表中。
我曾尝试从链接中实现snake游戏教程,但在运行该链接后,屏幕立即关闭。py文件。我已经查找了屏幕立即关闭错误,并尝试通过添加运行块来修复它,但现在每当我尝试绘制矩形时,屏幕就会变黑。