当前位置: 首页 > 知识库问答 >
问题:

如何从JMenuItem访问JTextPane内容?

胡曾笑
2023-03-14

我正在使用Java文本编辑器(Swing)。到目前为止,我已经做了身体。我有这个功能的问题:

  • 新建(JMenuItem)(清空JTextArea的内容)

当用户单击该按钮时,JTextArea内容应替换为空字符串。这是我的代码(我正在使用与问题无关的代码,例如创建菜单、添加菜单项,只添加类。)

这是TextArea类:

class MyTextArea extends JTextArea implements ActionListener {
    JTextArea myTextArea;
    public MyTextArea() {
        init();

    }

    public void init(){
        setLineWrap(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {

    }
}

(如你所见,是空的。)

这是MenuBar类:

class MyMenuBar extends JMenuBar implements ActionListener {
    private JMenu mArchivo;
    private JMenuItem mNuevo;

    public MyMenuBar(){
        init();
        add(mArchivo);
    }

    private void init() {
        mArchivo = settingUpMenus("Archivo", "Archivo", 'A');
        mNuevo = settingUpMenuItems("Nuevo", "Nuevo", 'N');
        mArchivo.add(mNuevo);
    }

    private JMenu settingUpMenus(String mTitle, String mDescription,         
char mMnemonic) {
        JMenu mMenu;
        mMenu = new JMenu(mTitle);
        mMenu.setMnemonic(mMnemonic);

mMenu.getAccessibleContext().setAccessibleDescription(mDescription);
        mMenu.setActionCommand(mTitle);
        mMenu.addActionListener(this::actionPerformed);
        return mMenu;
    }

    private JMenuItem settingUpMenuItems(String mTitle, String 
mDescription, char mMnemonic) {
        JMenuItem mMenuItem;
        mMenuItem = new JMenuItem(mTitle);
        mMenuItem.setMnemonic(mMnemonic);



  mMenuItem.getAccessibleContext().
setAccessibleDescription(mDescription);
        mMenuItem.setActionCommand(mTitle);
        mMenuItem.addActionListener(this::actionPerformed);
        return mMenuItem;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        switch(e.getActionCommand()) {
            case "Nuevo":
                onNew();
                break;
        }
    }

    private void onNew() {

    }
}

这是类构造函数,我在其中添加了JTextArea和JMenu,以及它的项和所有内容。

public Editor() {
    JScrollPane myScrollPane = new JScrollPane(new MyTextArea(), 
    JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, 
    JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    systemLook();
    setTitle("Text editor");
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    setSize(new Dimension(800, 700));
    setVisible(true);
    setJMenuBar(new MyMenuBar());
    add(myScrollPane);
}

然而,我已经尝试了很多方法让我的新按钮访问JTextArea的当前实例并对其进行修改,比如在JMenu类中的actionPerformed方法中使用ActionEvent对象获取父类。但我所做的任何一件事都无法进入JTextArea。有什么想法吗?我应该用另一种方式实现它吗?

共有1个答案

子车劲
2023-03-14

只需将其作为参数传递到菜单栏的构造函数中,如

...
private JTextArea myTextArea;

public MyMenuBar(MyTextArea myTextArea){
    init();
    add(mArchivo);
    this.myTextArea = myTextArea;
}
...

总的来说

MyTextArea myTextArea = new MyTextArea();
JScrollPane myScrollPane = new JScrollPane(myTextArea, 
        JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, 
        JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
systemLook();
setTitle("Text editor");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(new Dimension(800, 700));
setVisible(true);
setJMenuBar(new MyMenuBar(myTextArea));
 类似资料:
  • 问题内容: 我正在开发一个应用程序,当我从列表中选择一个值(文件)时,应该在另一种形式的jTextPane中打开它。我正在使用两个面板,一个是显示我的列表的mainpanel,另一个是ExcelSheet,当我单击列表值时,mainpanel关闭并显示新表单ExcelSheet,但不显示jTextPane中doc文件的内容。 问题答案: 使用封装,为了显示给定文件更新文本窗格中的代码。您可以从添加

  • 我正在开发一个应用程序,当我从列表中选择一个值(文件)时,它应该以不同的形式在jTextPane中打开。我使用的是两个面板,一个是显示列表的主面板,另一个是ExcelSheet,当我单击列表值时,主面板关闭,新表单ExcelSheet显示,但jTextPane中的文档文件内容不显示。

  • 如何从AWS Lambda函数中读取Dynamodb记录? 我正试图通过以下方式调用get_item: 但是,当我通过Lambda测试工具运行测试时,它失败并出现错误: 尽管文档说get_item应该返回包含字典的对象,但它实际上返回: 为什么没有提供项目?如何从Dynamo检索记录?

  • 问题内容: 是否可以从Java内部类中获取对它的引用? 即 问题答案: 您可以像这样访问外部类的实例:

  • 在Spring Boot项目中,我试图从我的IDE中查看内存中的表。 如何从Intellij IDEA访问内存中的h2数据库。 这是我的应用程序的一个片段。yml:

  • 问题内容: 如何从片段(android.support.v4.app.Fragment)中访问ActionBar。我正在使用Android支持库v4和v7。我没有使用Sherlock库。 承载片段的活动是ActionBarActivity。 我已经阅读了Android帮助片段Fragment,它也导致了我getActivity(),但是没有getSupportActionBar()方法。 问题答案