java - 从另一个类更改 JTextArea 值

标签 java swing

如何允许另一个类修改另一个类的 JTextArea?

例如,假设我有 2 个类(class):

Panel.java

public class Panel extends JPanel
{
    private JTextArea instructions;

    public Panel()
    {
        instructions = new JTextArea(15,15);
        add(instructions);
    }
}

MenuBar.java

public class MenuBar extends JMenuBar
{
    private JMenuItem openMenuItem,;

    public MenuBar()
    {
        JMenu fileMenu = new JMenu("File");
        openMenuItem = new JMenuItem("Open");
        fileMenu.add(openMenuItem);
        add(fileMenu);

        MenuListener listener = new MenuListener();
        openMenuItem.addActionListener(listener);
    }

    private class MenuListener implements ActionListener
    {
        public void actionPerformed(ActionEvent event)
        {
            if( event.getSource() == openMenuItem )
            {
                // change value of JTextArea from Panel.java
            }
        }
    }
}

如何修改 MenuBar.class 中的 JTextArea (Panel.java) 指令?

最佳答案

首先,MenuBar 的代码片段由于以下行中的逗号而无法编译:

private JMenuItem openMenuItem,;

现在你有了一个类属性指令,它是类Panel 中的一个JTextArea 对象。这是私有(private)的,因此只有类面板才能访问它,这很好。如果您想通过另一个类获取或设置该属性的值,您可以为其添加 getter/setter。

在面板中添加以下代码:

public void setInstructions(JTextArea instructions) {
        this.instructions = instructions;
    }

    public JTextArea getInstructions() {
        return instructions;
    }

setInstructions 是您要查找的方法,您可以使用您作为参数传递的值来设置指令 TextArea。

请使用以下代码修改 MenuBar 中的私有(private)类以显示我的意思。

private class MenuListener implements ActionListener
    {
        public void actionPerformed(ActionEvent event)
        {
            if( event.getSource() == openMenuItem )
            {
                Panel panel = new Panel(); //I don't know where you get your panel data from so I create a new one
                panel.setInstructions(new JTextArea("I'm a text area and I have instructions")); //set the JTextArea value

                System.out.println(panel.getInstructions().getText()); //test print to show how you can get the JTextArea text
            }
        }
    }

我还添加了测试打印来验证 setter 的工作原理。

关于java - 从另一个类更改 JTextArea 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41528518/

相关文章:

java - 有什么方法可以更好地重写我的方法吗?

java - 其余异常: Wrappers vs Error Object

java - 通过 JLayer 和 LayerUI 缩放 JLayeredPane

java - scrollRectToVisible 不会将滚动 Pane 移动到顶部

java 说 'cannot find symbol' 尽管方法是在类中声明的

java - @Startup注解不起作用

java - 这段代码有什么问题吗?它没有过滤集合!

java - Java SWING JFrame 中 Windows 窗体的 DialogResult 属性相当于什么?

java - 动态添加组件到 JScrollPane

java - 自定义 JOptionPane/如何在将值返回给方法之前等待单击框架中的按钮