「日曜日」などの日を表す JTextField があります。マウスを左クリックすると背景色が変わり、マウスを右クリックすると、メニュー項目をクリックした後にポップアップ メニューが表示されます。 、「月の1日」など、値を取得し、メニューを閉じてからbgcolorを変更します。私のコードは次のようになります:
JTextField dayHeading=new JTextField("Su");
......
final JPopupMenu Pmenu;
JMenuItem menuItem;
Pmenu=new JPopupMenu();
menuItem=new JMenuItem("1st of month");
Pmenu.add(menuItem);
menuItem=new JMenuItem("2nd of month");
Pmenu.add(menuItem);
......
menuItem.addMouseListener(new MouseAdapter()
{
public void mouseReleased(final MouseEvent e)
{
System.out.println(((JMenuItem)e.getComponent()).getText());
onHeadingClicked(e); // Error : java.lang.ClassCastException: javax.swing.JMenuItem cannot be cast to javax.swing.JTextField
// How to get the orininal JTextField event that started this pop up menu, so I can pass it onto onHeadingClicked() ?
}
});
......
dayHeading.setEditable(false);
dayHeading.setFocusable(false);
dayHeading.addMouseListener(new MouseAdapter()
{
public void mouseReleased(final MouseEvent evt)
{
if (SwingUtilities.isLeftMouseButton(evt)) onHeadingClicked(evt);
else if (SwingUtilities.isRightMouseButton(evt)) Pmenu.show(evt.getComponent(),evt.getX(),evt.getY());
}
});
......
void onHeadingClicked(final java.awt.event.MouseEvent evt)
{
final javax.swing.JTextField fld=(javax.swing.JTextField) evt.getSource();
...
}
私の質問は: menuItem.addMouseListener セクションで、このポップアップ メニューを開始した元の JTextField イベントを取得する方法です。