为了账号安全,请及时绑定邮箱和手机立即绑定

如何使一个类中的按钮影响另一个类中的文本区域?

如何使一个类中的按钮影响另一个类中的文本区域?

哔哔one 2022-09-01 19:35:54
请帮助我了解这是如何运作的。例如,我很难理解如何在一个类中更改文本,而该类位于同一包的另一个类中。我做了一个简单的应用程序,只是为了在这里问一个问题,我需要这个更大的学校项目,我需要实现这个来与多个班级一起工作。JButtonJTextArea当我把所有东西放在同一个类中时,它可以工作,但我需要在单独的类中使用它。下面是简单的代码。import javax.swing.*;import java.awt.event.*;import java.awt.*;class Button extends JPanel {    private JButton button;    private Panel panel;    public Button() {        button = new JButton("BUTTON");        panel = new Panel();        add(button);        button.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                JButton clicked = (JButton) e.getSource();                String input = clicked.getText();                panel.setTextArea(input);                //System.out.println(input);            }        });    }}class Panel extends JPanel {    private JTextArea textArea;    public Panel() {        setLayout(new BorderLayout());        textArea = new JTextArea();        add(textArea, BorderLayout.CENTER);    }    public JTextArea getTextArea() {        return textArea;    }    void setTextArea(String text) {        this.textArea.setText(text);    }}public class Java extends JFrame {    private Button dugme;    private JFrame frame;    private Panel panel;    public Java() {        frame = new JFrame();        dugme = new Button();        panel = new Panel();        //super("test");        frame.setLayout(new BorderLayout());        frame.setTitle("test");        frame.setSize(300, 400);        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        frame.setVisible(true);        frame.add(dugme, BorderLayout.NORTH);        frame.add(panel, BorderLayout.CENTER);    }    public static void main(String[] args) {        Java app = new Java();    }}我希望动作监听器改变面板中的文本,系统输出工作,所以监听器监听按钮,但我无法改变文本区域中的文本。
查看完整描述

1 回答

?
MM们

TA贡献1886条经验 获得超2个赞

正如@XtremeBaumer已经提到的,你有两个不同的类实例。您需要删除 secode 一个。Panel


public class Button extends JPanel {

    private JButton button;

    private Panel panel;

    public Button(Panel panel) { // we need already created instance of panel here.

        this.panel = panel;

        button = new JButton("BUTTON");

        // panel = new Panel(); <-- this line must be deleted.

        // ...

    }

}

public class Java extends JFrame {

    private Button dugme;

    private JFrame frame;

    private Panel panel;

    public Java(){

        frame = new JFrame();

        panel = new Panel();

        dugme = new Button(panel);

        // ...

    }

}

请同时更换线路


add(textArea, BorderLayout.CENTER);


add(new JScrollPane(textArea), BorderLayout.CENTER);

这允许您在文本大于文本 ara 大小时获取 scrool 条。


这是您重新设计的示例


import javax.swing.*;

import java.awt.event.*;

import java.awt.*;


class Button extends JPanel {


    private JButton button;

    private Panel panel;


    public Button(Panel panel) {

        this.panel = panel;

        button = new JButton("BUTTON");

        add(button);

        button.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                JButton clicked = (JButton) e.getSource();

                String input = clicked.getText();

                panel.setTextArea(input);

                //System.out.println(input);

            }

        });

    }

}


class Panel extends JPanel {


    private JTextArea textArea;


    public Panel() {

        setLayout(new BorderLayout());

        textArea = new JTextArea();

        add(new JScrollPane(textArea), BorderLayout.CENTER);

    }


    public JTextArea getTextArea() {

        return textArea;

    }


    void setTextArea(String text) {

        this.textArea.setText(text);

    }

}


public class Java extends JFrame {


    private Button dugme;

    private JFrame frame;

    private Panel panel;


    public Java() {

        frame = new JFrame();

        panel = new Panel();

        dugme = new Button(panel);

        //super("test");

        frame.setLayout(new BorderLayout());

        frame.setTitle("test");

        frame.setSize(300, 400);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.setVisible(true);

        frame.add(dugme, BorderLayout.NORTH);

        frame.add(panel, BorderLayout.CENTER);

    }


    public static void main(String[] args) {

        Java app = new Java();

    }

}


查看完整回答
反对 回复 2022-09-01
  • 1 回答
  • 0 关注
  • 78 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信