java*AWT 为什么给多行文本域编写右键菜单,出现的不是我编写的菜单

问题描述

java*AWT 为什么给多行文本域编写右键菜单,出现的不是我编写的菜单

为什么给多行文本域编写右键菜单,出现的不是我编写的菜单
原码贴上:
import java.awt.BorderLayout;
import java.awt.CheckboxMenuItem;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuItem;
import java.awt.MenuShortcut;
import java.awt.Panel;
import java.awt.PopupMenu;
import java.awt.TextArea;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

public class PopupMenuTest {
private TextArea ta=new TextArea(4,30);
private Frame f=new Frame("右键菜单测试");
PopupMenu pop=new PopupMenu();
CheckboxMenuItem autoWrap=new CheckboxMenuItem("自动换行");
MenuItem copyItem=new MenuItem("复制");
MenuItem pasteItem =new MenuItem("粘贴");
Menu format=new Menu("格式");
// 创建commentItem菜单项,指定使用“Ctrl+Shift+“注释
MenuItem commentItem=new MenuItem("注释",new MenuShortcut(KeyEvent.VK_SHIFT,true));
MenuItem cancelIetm=new MenuItem("取消注释");
private void init() {//----------------------------------------------------------------------------public
// TODO 以Lambda表达式创建菜单事件监听器
ActionListener menuListener=e->{
String cmd=e.getActionCommand();
ta.append("单击“"+cmd+"“菜单"+"
");
if (cmd.equals("退出")) {
System.exit(0);
}

    };

// 为commentItem菜单添加事件监听
commentItem.addActionListener(menuListener);
// 为Pop菜单添加菜单项
pop.add(autoWrap);
// 使用addSeparator方法来添加菜单分割线
pop.addSeparator();
pop.add(copyItem);
pop.add(pasteItem);
// 为format菜单添加菜单项
format.add(commentItem);
format.add(cancelIetm);
// 使用new MenuItem("-")方法添加菜单分割线
pop.add(new MenuItem("-"));
// 将format菜单组合到pop菜单中,从而形成二级菜单
pop.add(format);
final Panel p=new Panel();
p.setPreferredSize(new Dimension(300, 160));
// 向p窗口中添加PopupMenu对象
p.add(pop);
// 添加鼠标事件监听器
p.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
// 如果释放的是鼠标右键
if (e.isPopupTrigger()) {
pop.show(p, e.getX(), e.getY());
}
}

    });
    /*p.addMouseListener(new MouseAdapter() {

        @Override
        public void mouseReleased(MouseEvent e) {
            // TODO Auto-generated method stub

// 如果释放的是鼠标右键
if (e.isPopupTrigger()) {
pop.show(p, e.getX(), e.getY());
}
}

        @Override
        public void mousePressed(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseExited(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseEntered(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseClicked(MouseEvent e) {
            // TODO Auto-generated method stub

        }
    });
    */

    f.add(ta,BorderLayout.SOUTH);
    //      以匿名内部来的形式来创建事件监听对象
    f.addWindowListener(new WindowListener() {

        @Override
        public void windowOpened(WindowEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void windowIconified(WindowEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void windowDeiconified(WindowEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void windowDeactivated(WindowEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void windowClosing(WindowEvent e) {
            // TODO Auto-generated method stub
            System.out.println("用户关闭窗口!

");
            System.out.println("用户关闭窗口!
");
            System.exit(0);
        }

        @Override
        public void windowClosed(WindowEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void windowActivated(WindowEvent e) {
            // TODO Auto-generated method stub

        }
    });

    f.pack();
    f.setVisible(true);

}
public static void main(String[] args) {
    new PopupMenuTest().init();
}

}
是因为AWT的实现机制吗?
AWT没有为GUI组件提供实现,调用的只是运行平台(windows)的GUI组件来创建和平台一致的对等体????是这样吗?我的理解有问题吗?
如果对的话,怎么实现右键菜单的功能呢?
不对的话为什么?

解决方案

为QT程序编写右键菜单
为QT程序编写右键菜单

时间: 2024-08-15 21:47:49

java*AWT 为什么给多行文本域编写右键菜单,出现的不是我编写的菜单的相关文章

java.awt.TextArea 中多行文本 设置鼠标右击的监听 确定是第几行 被右击

问题描述 我的TextArea是通过setText()把文本放进去,而文本是通过n进行换行的,现在我是想把某一行的文本 设置右击监听进行删除 对应行的文本,但是不知道如何确定是右击的哪一行. 请指点,谢谢. 解决方案 可以这样做:TextArea ta = new TextArea("Hello", 5, 40);//对TextArea增加鼠标事件监听ta.addMouseListener(new MouseListener(){public void mouseClicked(Mou

动态绑定事件(java AWT)

新AWT事件模型给我们带来的一个好处就是灵活性.在老的模型中我们被迫为我们的程序动作艰难地编写代码.但新的模型我们可以用单一方法调用增加和删除事件动作.下面的例子证明了这一点:   //: DynamicEvents.java // The new Java 1.1 event model allows you to // change event behavior dynamically. Also // demonstrates multiple actions for an event.

通过java.awt.Robot的createScreenCapture截取屏幕

通过java.awt.Robot的createScreenCapture截屏. public static void captureScreen(String fileName) throws Exception { Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Rectangle screenRectangle = new Rectangle(screenSize); Robot robot = new

Java.awt.Robot类控制鼠标和键盘

Java.awt.Robot类用于控制鼠标和键盘.一旦你得到这种控制,你能够通过你的Java代码做与鼠标和键盘任何类型的操作.这个类通常用于自动化测试.下面的代码样例将向您展示Robot类如何处理键盘事件.如果你运行此代码,并打开notepad,您将在notepad中看到HI CAOER.赶快试一试吧. import java.awt.AWTException; import java.awt.Robot; import java.awt.event.KeyEvent; public class

在eclipse里如何导入java.awt包呢

问题描述 在eclipse里如何导入java.awt包呢 java.awt的包到底在哪里可以下载,并且我的eclipse汉化也汉化不了. 解决方案 import java.awt.*;

窗口-java awt 图形组件 弹出框

问题描述 java awt 图形组件 弹出框 多次点击同一按钮,会出现如图情况,然后我在add组件前加了一个判定条件,但是组件的内容无法更新,第一次点了什么按钮,对应的组件就一直在,怎么解决呢?图片 解决方案 应该是你的监听事件出问题了吧,当然这只是我个人觉得,不对莫怪. 解决方案二: 组件的内容是什么?每次不都是显示用户名和密码框等待输入么

java awt 组件 窗口 的问题

问题描述 java awt 组件 窗口 的问题 多次点击同一按钮,会出现如图情况,然后我在add组件前加了一个判定条件,但是组件的内容无法更新,第一次点了什么按钮,对应的组件就一直在,怎么解决呢? 解决方案 JAVA中的AWT组件关于java中window以及子组件的窗口居中问题黑马程序员_王康 用java AWT编写类似百度搜索的窗口. 解决方案二: 你的代码具体是怎么处理的呢?如果用户没有手动关闭,也应该由程序自动关闭相应的窗体的.

java awt 布局 下面panel 尺寸已经设定好了,为什么不按照流式布局添加 而是尺寸变了

问题描述 java awt 布局 下面panel 尺寸已经设定好了,为什么不按照流式布局添加 而是尺寸变了 package huatu; import java.awt.*; import java.awt.image.BufferedImage; import javax.swing.BoxLayout; public class num1 { private Frame f=new Frame("绘图"); private Panel p=new Panel(); private

java.awt页面乱码,在线等,急

问题描述 java.awt页面乱码,在线等,急 代码如下,运行了之后就出现乱码,在线等,急 package com.awt; import java.awt.*; import java.awt.event.*; public class TestChoice implements ItemListener,ActionListener{ TextField name; CheckboxGroup cg; Choice career; List city; Checkbox[] favorite