gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:43:05 26 4
gpt4 key购买 nike

请帮助我理解这是如何工作的。例如,我很难理解一个类中的 JButton 如何更改同一包的另一个类中的 JTextArea 中的文本。我制作了一个简单的应用程序只是为了在这里问一个问题,我需要这个来完成一个更大的学校项目,我需要在多个类(class)中实现这个项目。

当我将所有内容放在同一个类中时,它可以工作,但我需要将它放在不同的类中。

这是简单的代码。

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();
}
}

我希望 Action 监听器更改面板中的文本,系统输出可以工作,因此监听器可以监听按钮,但我无法使其更改文本区域中的文本。

最佳答案

正如 @XtremeBaumer 已经提到的,您有两个不同的 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);

当文本大于文本区域大小时,您可以获取滚动条。

这是您修改后的示例

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();
}
}

关于java - 如何使一个类中的按钮影响另一个类中的文本区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55334778/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com