弹出菜单在 java 中不起作用?
Popupmenu wont work in java?
我正在构建一个文字处理器程序作为我在学校的 Java class 的作业,当我右键单击我的文本区域时,我很难让弹出菜单工作.我已经构建了弹出菜单,并让我的文本区域监听我的弹出监听器,并且我已经用
覆盖了鼠标按下和鼠标释放功能
class popupframe extends JFrame{
JMenuItem copy;
JMenuItem paste;
JTextArea textarea = new JTextArea();
JPopupMenu pop;
popupframe(){
Container cpane = getContentPane();
setSize(300 , 300);
setLocation(300, 300);
setTitle("Test");
JPopupMenu pop = new JPopupMenu();
copy = new JMenuItem("copy");
paste = new JMenuItem("paste");
textarea = new JTextArea("something goes here", 5, 5);
pop.add(copy);
pop.add(paste);
PopupListener popuplistener = new PopupListener();
textarea.addMouseListener(popuplistener);
}
class PopupListener extends MouseAdapter{
public void MousePressed(MouseEvent e){
popit(e);
}
public void MouseReleased(MouseEvent e){
popit(e);
}
private void popit(MouseEvent e){
if(e.isPopupTrigger()){
pop.show(e.getComponent(), e.getX(), e.getY());
}
}
}
}
我不明白为什么它不起作用,但也许我遗漏了一些重要的东西,请帮忙!!非常感谢
将 @Override
注释添加到您认为重写的方法中...
class PopupListener extends MouseAdapter {
@Override
public void MousePressed(MouseEvent e) {
System.out.println("Pressed");
popit(e);
}
@Override
public void MouseReleased(MouseEvent e) {
System.out.println("Pressed");
popit(e);
}
你现在会发现编译失败了,但为什么呢?因为 Java 区分大小写,并且按照惯例,方法名称以小写字符开头
你会发现类似...
class PopupListener extends MouseAdapter {
@Override
public void mousePressed(MouseEvent e) {
popit(e);
}
@Override
public void mouseReleased(MouseEvent e) {
popit(e);
}
@Override
public void mouseClicked(MouseEvent e) {
popit(e);
}
private void popit(MouseEvent e) {
if (e.isPopupTrigger()) {
pop.show(e.getComponent(), e.getX(), e.getY());
}
}
}
效果会更好。但话说回来,你通常会发现
textarea.setComponentPopupMenu(pop);
明显更容易且不易出错(并且不会像您的示例代码那样导致 NullPointerException
。
我正在构建一个文字处理器程序作为我在学校的 Java class 的作业,当我右键单击我的文本区域时,我很难让弹出菜单工作.我已经构建了弹出菜单,并让我的文本区域监听我的弹出监听器,并且我已经用
覆盖了鼠标按下和鼠标释放功能class popupframe extends JFrame{
JMenuItem copy;
JMenuItem paste;
JTextArea textarea = new JTextArea();
JPopupMenu pop;
popupframe(){
Container cpane = getContentPane();
setSize(300 , 300);
setLocation(300, 300);
setTitle("Test");
JPopupMenu pop = new JPopupMenu();
copy = new JMenuItem("copy");
paste = new JMenuItem("paste");
textarea = new JTextArea("something goes here", 5, 5);
pop.add(copy);
pop.add(paste);
PopupListener popuplistener = new PopupListener();
textarea.addMouseListener(popuplistener);
}
class PopupListener extends MouseAdapter{
public void MousePressed(MouseEvent e){
popit(e);
}
public void MouseReleased(MouseEvent e){
popit(e);
}
private void popit(MouseEvent e){
if(e.isPopupTrigger()){
pop.show(e.getComponent(), e.getX(), e.getY());
}
}
}
}
我不明白为什么它不起作用,但也许我遗漏了一些重要的东西,请帮忙!!非常感谢
将 @Override
注释添加到您认为重写的方法中...
class PopupListener extends MouseAdapter {
@Override
public void MousePressed(MouseEvent e) {
System.out.println("Pressed");
popit(e);
}
@Override
public void MouseReleased(MouseEvent e) {
System.out.println("Pressed");
popit(e);
}
你现在会发现编译失败了,但为什么呢?因为 Java 区分大小写,并且按照惯例,方法名称以小写字符开头
你会发现类似...
class PopupListener extends MouseAdapter {
@Override
public void mousePressed(MouseEvent e) {
popit(e);
}
@Override
public void mouseReleased(MouseEvent e) {
popit(e);
}
@Override
public void mouseClicked(MouseEvent e) {
popit(e);
}
private void popit(MouseEvent e) {
if (e.isPopupTrigger()) {
pop.show(e.getComponent(), e.getX(), e.getY());
}
}
}
效果会更好。但话说回来,你通常会发现
textarea.setComponentPopupMenu(pop);
明显更容易且不易出错(并且不会像您的示例代码那样导致 NullPointerException
。