Trong quá khứ, khi một người đã JPopupMenu
có thể nhìn thấy đó là mục đầu tiên sẽ được chọn theo mặc định: http://weblogs.java.net/blog/alexfromsun/archive/2008/02/jtrayicon_updat.htmlCách chọn mục đầu tiên trong JPopupMenu?
Ngày nay hành vi mặc định là bật lên menu mà không bất kỳ mục đã chọn. Tôi muốn tạo một JPopupMenu
với một mục duy nhất sẽ bật lên được chọn và căn giữa dưới con trỏ chuột. Tôi đã quản lý để có được mục để bật lên trung tâm dưới con chuột nhưng tôi JMenuItem
từ chối để render như thể nó được chọn. Nếu tôi di chuyển chuột ra khỏi mục và quay lại, chọn đúng cách.
Bất kỳ ý tưởng nào?
Đây là testcase của tôi:
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);
}
}
Tôi cũng tìm thấy một số hành vi không nhất quán (xem câu trả lời cập nhật của tôi). Bạn có thể xác nhận điều này không? –
Tôi báo cáo đây là lỗi đối với Sun. Tôi sẽ cho bạn biết những gì họ viết lại. – Gili
Đây là báo cáo lỗi liên quan: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6799989 – Gili