我正在创建一个右键单击上下文菜单,通过JMenu
右键单击实例化并将其位置设置为鼠标位置...是否有更好的方法?
我想在我的应用程序中创建一个工具栏.如果单击该工具栏上的按钮,它将弹出一个菜单,就像在Eclipse的工具栏中一样.我不知道如何在Swing中这样做.有谁可以帮助我吗?我试过谷歌,但一无所获.
Nimbus通常看起来很棒,但对于某些颜色组合,结果是非最佳的.在我的情况下,a的背景JPopupMenu
不适合,这就是我想手动设置的原因.
我在Java 7上,有趣的是,Nimbus完全忽略了UIManager
(像PopupMenu.background
)中某些属性的设置.所以我唯一的选择是创建JPopupMenu
该覆盖的子类paintComponent(...)
.我知道,那很讨厌,但至少它起作用了.
但是,如果你添加一个JMenu
到另一个菜单,它嵌入它自己的实例,JPopupMenu
我无法弄清楚如何用我自己的子类替换它.
即使PopupMenuUI
为嵌入式实例分配自己也没有带来任何结果.如果直接从JPopupMenu
overriden paint(...)
方法继承而被调用,但是,无论我做了什么,都没有绘制.如果继承的javax.swing.plaf.synth.SynthPopupMenuUI
paint
甚至没有被调用,结果就是我根本没有设置自己PopupMenuUI
.
所以简单的问题是:如何JPopupMenu
使用Nimbus作为L&F,在Java 7上调整一个或者(如果这更容易)的背景颜色?
编辑:代码示例
看一下下面的代码和结果:
public static void main(final String[] args) {
try {
UIManager.setLookAndFeel(NimbusLookAndFeel.class.getCanonicalName());
UIManager.getLookAndFeelDefaults().put("PopupMenu.background", Color.GREEN);
UIManager.getLookAndFeelDefaults().put("Panel.background", Color.RED);
UIManager.getLookAndFeelDefaults().put("List.background", Color.BLUE);
} catch (ClassNotFoundException | InstantiationException
| IllegalAccessException | UnsupportedLookAndFeelException e) {
e.printStackTrace();
}
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(200,200);
JPanel panel = new JPanel(new BorderLayout());
panel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
JList …
Run Code Online (Sandbox Code Playgroud) 我想添加一种滚动菜单项的方法JPopupMenu
,就像滚动菜单中的项目列表一样JComboBox
.
假设我有10个菜单项.我想一次只显示5个菜单项,我会在底部或顶部使用垂直滚动按钮JPopupMenu
来显示未列出的菜单项并隐藏我刚看到的菜单项.
可能吗?我正在使用JIDE软件JideSplitButton
,它会JPopupMenu
在点击时显示.我试图保持我放置的命令栏的外观和感觉JideSplitButton
,所以JComboBox
除非我真的需要,否则我不想用它替换它.
我想添加JPopupMenu
到任务栏作为TrayIcon
(即 systemTray.add(trayIcon)
),但我还没有找到办法这样做.从文档中,TrayIcon的构造函数如下所示:
public TrayIcon(Image image,
String tooltip,
PopupMenu popup)
Run Code Online (Sandbox Code Playgroud)
有什么方法可以做到这一点吗?
我正在使用java中的任务托盘图标,我喜欢打开一个弹出菜单,使用左键单击相同的弹出菜单,因为我在右键单击打开,请帮助我快速响应.
提前致谢...
这是用于右键单击的代码需要在左键单击时显示相同的弹出窗口...不要忘记放置任何图像@"src/img"文件夹,名称为"titleImg.jpg"
只需运行此...这是一个工作示例,但我必须使用左键单击显示相同的弹出窗口
我已经检查了鼠标监听器,它听左键单击托盘图标,但如何显示弹出菜单使用该???
package com.abc.dao;
import java.awt.AWTException;
import java.awt.CheckboxMenuItem;
import java.awt.Menu;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
public class MyTaskTray {
public static void main(String arg[]){
//Check the SystemTray is supported
if (!SystemTray.isSupported()) {
System.out.println("SystemTray is not supported");
return;
}
final PopupMenu popup = new PopupMenu();
final TrayIcon trayIcon =
new TrayIcon(Toolkit.getDefaultToolkit().getImage(new java.io.File("").getAbsolutePath()+"/bin/img/titleImg.jpg"), "Library Drop");
final SystemTray tray = SystemTray.getSystemTray();
// Create a pop-up menu components
MenuItem aboutItem = new MenuItem("About");
CheckboxMenuItem cb1 = …
Run Code Online (Sandbox Code Playgroud) 我有一个JTextField
我希望建议结果与用户的输入匹配.我在一个JList
包含的内容中显示这些建议JPopupMenu
.
但是,当以编程方式打开弹出菜单时show(Component invoker, int x, int y)
,焦点将从中获取JTextField
.
奇怪的是,如果我打电话setVisible(true)
,焦点不会被盗; 但是然后JPopupMenu
没有连接到任何面板,并且当盒子打开时最小化应用程序时,它仍然涂在窗口上.
我也尝试将焦点重置为JTextField
使用requestFocus()
,但后来我必须使用恢复插入位置SwingUtilities.invokeLater()
,并且调用后面的东西给用户一点点余地来弄乱现有内容/覆盖它/或做其他不可预知的事情.
我得到的代码是有效的:
JTextField field = new JTextField();
JPopupMenu menu = new JPopupMenu();
field.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
JList list = getAListOfResults();
menu.add(list);
menu.show(field, 0, field.getHeight());
}
});
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议最好的途径,以JPopupMenu
编程方式显示,同时保持对焦点的关注JTextField
?
我想JCheckBoxMenuItem
在一个中使用s JPopupMenu
.它可以工作,但问题是当选中或取消选中复选框项时,弹出菜单会消失.因此,如果想要检查/取消选中多个项目,则需要重复启动弹出窗口,这很烦人.
奇怪的是,如果我只使用JCheckBox
菜单中的普通项(而不是JCheckBoxMenuItem
s),行为就像它应该的那样:弹出窗口停留在那里,可以选中/取消选中复选框.完成后,只需在外部单击即可关闭弹出窗口.
如果有弹出的项目,如何让弹出窗口表现得像JCheckBoxMenuItem
?我更喜欢使用JCheckBoxMenuItem
s,因为它们的外观.
如何防止触发并JPopupMenu
仅Mouse Cursor
在选中时显示JTable'Row
我的问题:如果有另一种方式,getBounds
从选定的行,并确定/比较与Mouse
位置...
我简单的sscce演示了不想要的相反状态,任何行都可以选择并JPopupMenu
从整体触发JTable
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public class TableCheckBox extends JFrame {
private static final long serialVersionUID = 1L;
private JTable table;
public TableCheckBox() {
Object[] columnNames = {"Type", "Company", "Shares", "Price", "Boolean"};
Object[][] data = {
{"Buy", "IBM", new Integer(1000), new Double(80.50), false},
{"Sell", "MicroSoft", new Integer(2000), new Double(6.25), true},
{"Sell", "Apple", new Integer(3000), new Double(7.35), true},
{"Buy", "Nortel", new Integer(4000), new Double(20.00), …
Run Code Online (Sandbox Code Playgroud) 我原来问的并没有明确说明我的问题/问题,所以我会更好地解释.我有一个JButton
,设置一个JDialog
可见.JDialog将WindowListener
其设置为在windowDeactivated()
事件中不可见,该事件在用户在对话框外单击时触发.按钮ActionListener
检查对话框是否为可见,如果为true则隐藏它,如果为false则显示该对话框.
windowDeactivated()
只要用户在对话框外单击,就会始终触发是否单击按钮.我遇到的问题是当用户单击按钮关闭对话框时.该对话框由关闭WindowListener
,然后ActionListener
尝试显示它.
如果windowDeactivated()
没有setVisible(false)
,则对话框仍然打开,但在父窗口后面.我要求的是如何访问里面的点击位置windowDeactivated()
.如果我知道用户点击了按钮并且windowDeactivated()可以跳过隐藏对话框,那么按钮ActionListener
会看到它仍然可见并隐藏它.
public PropertiesButton extends JButton { private JDialog theWindow; public PropertiesButton() { theWindow = new JDialog(); theWindow.setUndecorated(true); theWindow.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); theWindow.add(new JMenuCheckBoxItem("Something")); theWindow.addWindowListener(new WindowListener() { // just an example, need to implement other methods public void windowDeactivated(WindowEvent e) { theWindow.setVisible(false); } }); this.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (theWindow.isVisible()) { theWindow.setVisible(false); } else { …
jpopupmenu ×10
swing ×10
java ×9
jbutton ×2
trayicon ×2
contextmenu ×1
focus ×1
jcheckbox ×1
jdialog ×1
jtable ×1
menu ×1
nimbus ×1
onmouseover ×1
system-tray ×1