在過去,當一個人做了一個JPopupMenu
可見它的第一個項目將在默認情況下都被選擇:http://weblogs.java.net/blog/alexfromsun/archive/2008/02/jtrayicon_updat.html如何選擇JPopupMenu中的第一項?
如今的默認行爲是彈出菜單中選擇沒有任何項目。我想創建一個JPopupMenu
與一個單一的項目將彈出選中並在鼠標指針下居中。我設法讓項目在鼠標中間彈出,但我JMenuItem
拒絕渲染,就好像它被選中一樣。如果我將鼠標從項目中移出並重新插入,則可以正確選擇。
任何想法?
這裏是我的測試用例:
import java.awt.Component;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
public class Test extends JFrame
{
public static void main(String[] args)
{
JFrame frame = new JFrame();
frame.setSize(800, 600);
frame.getContentPane().addMouseListener(new MouseAdapter()
{
@Override
public void mousePressed(MouseEvent e)
{
if (e.isPopupTrigger())
popupTriggered(e);
}
@Override
public void mouseReleased(MouseEvent e)
{
if (e.isPopupTrigger())
popupTriggered(e);
}
private void popupTriggered(MouseEvent e)
{
JPopupMenu menu = new JPopupMenu();
final JMenuItem item = new JMenuItem("This is a JMenuItem");
menu.add(item);
Point point = e.getPoint();
int x = point.x - (item.getPreferredSize().width/2);
int y = point.y - (item.getPreferredSize().height/2);
menu.show((Component) e.getSource(), x, y);
}
});
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setVisible(true);
}
}
我也發現了一些不一致的行爲(請參閱我的更新回答)。你能證實這一點嗎? – 2009-01-30 03:20:37
我向Sun報告這是一個錯誤。我會讓你知道他們回信。 – Gili 2009-01-30 19:48:18
以下是相關的錯誤報告:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6799989 – Gili 2009-02-28 17:37:35