猿问

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

请帮助我了解这是如何运作的。例如,我很难理解如何在一个类中更改文本,而该类位于同一包的另一个类中。我做了一个简单的应用程序,只是为了在这里问一个问题,我需要这个更大的学校项目,我需要实现这个来与多个班级一起工作。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();

    }

}

我希望动作监听器改变面板中的文本,系统输出工作,所以监听器监听按钮,但我无法改变文本区域中的文本。


哔哔one
浏览 83回答 1
1回答

MM们

正如@XtremeBaumer已经提到的,你有两个不同的类实例。您需要删除 secode 一个。Panelpublic class Button extends JPanel {&nbsp; &nbsp; private JButton button;&nbsp; &nbsp; private Panel panel;&nbsp; &nbsp; public Button(Panel panel) { // we need already created instance of panel here.&nbsp; &nbsp; &nbsp; &nbsp; this.panel = panel;&nbsp; &nbsp; &nbsp; &nbsp; button = new JButton("BUTTON");&nbsp; &nbsp; &nbsp; &nbsp; // panel = new Panel(); <-- this line must be deleted.&nbsp; &nbsp; &nbsp; &nbsp; // ...&nbsp; &nbsp; }}public class Java extends JFrame {&nbsp; &nbsp; private Button dugme;&nbsp; &nbsp; private JFrame frame;&nbsp; &nbsp; private Panel panel;&nbsp; &nbsp; public Java(){&nbsp; &nbsp; &nbsp; &nbsp; frame = new JFrame();&nbsp; &nbsp; &nbsp; &nbsp; panel = new Panel();&nbsp; &nbsp; &nbsp; &nbsp; dugme = new Button(panel);&nbsp; &nbsp; &nbsp; &nbsp; // ...&nbsp; &nbsp; }}请同时更换线路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 {&nbsp; &nbsp; private JButton button;&nbsp; &nbsp; private Panel panel;&nbsp; &nbsp; public Button(Panel panel) {&nbsp; &nbsp; &nbsp; &nbsp; this.panel = panel;&nbsp; &nbsp; &nbsp; &nbsp; button = new JButton("BUTTON");&nbsp; &nbsp; &nbsp; &nbsp; add(button);&nbsp; &nbsp; &nbsp; &nbsp; button.addActionListener(new ActionListener() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void actionPerformed(ActionEvent e) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; JButton clicked = (JButton) e.getSource();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String input = clicked.getText();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; panel.setTextArea(input);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //System.out.println(input);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; }}class Panel extends JPanel {&nbsp; &nbsp; private JTextArea textArea;&nbsp; &nbsp; public Panel() {&nbsp; &nbsp; &nbsp; &nbsp; setLayout(new BorderLayout());&nbsp; &nbsp; &nbsp; &nbsp; textArea = new JTextArea();&nbsp; &nbsp; &nbsp; &nbsp; add(new JScrollPane(textArea), BorderLayout.CENTER);&nbsp; &nbsp; }&nbsp; &nbsp; public JTextArea getTextArea() {&nbsp; &nbsp; &nbsp; &nbsp; return textArea;&nbsp; &nbsp; }&nbsp; &nbsp; void setTextArea(String text) {&nbsp; &nbsp; &nbsp; &nbsp; this.textArea.setText(text);&nbsp; &nbsp; }}public class Java extends JFrame {&nbsp; &nbsp; private Button dugme;&nbsp; &nbsp; private JFrame frame;&nbsp; &nbsp; private Panel panel;&nbsp; &nbsp; public Java() {&nbsp; &nbsp; &nbsp; &nbsp; frame = new JFrame();&nbsp; &nbsp; &nbsp; &nbsp; panel = new Panel();&nbsp; &nbsp; &nbsp; &nbsp; dugme = new Button(panel);&nbsp; &nbsp; &nbsp; &nbsp; //super("test");&nbsp; &nbsp; &nbsp; &nbsp; frame.setLayout(new BorderLayout());&nbsp; &nbsp; &nbsp; &nbsp; frame.setTitle("test");&nbsp; &nbsp; &nbsp; &nbsp; frame.setSize(300, 400);&nbsp; &nbsp; &nbsp; &nbsp; frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&nbsp; &nbsp; &nbsp; &nbsp; frame.setVisible(true);&nbsp; &nbsp; &nbsp; &nbsp; frame.add(dugme, BorderLayout.NORTH);&nbsp; &nbsp; &nbsp; &nbsp; frame.add(panel, BorderLayout.CENTER);&nbsp; &nbsp; }&nbsp; &nbsp; public static void main(String[] args) {&nbsp; &nbsp; &nbsp; &nbsp; Java app = new Java();&nbsp; &nbsp; }}
随时随地看视频慕课网APP

相关分类

Java
我要回答