Java 如果在另一个类中执行了某些操作,如何刷新该类的实例

Java 如果在另一个类中执行了某些操作,如何刷新该类的实例,java,swing,variables,actionlistener,Java,Swing,Variables,Actionlistener,我有类DnyMesice,它创建了许多JButton实例。每个实例都包含变量poznamkaDne。此类DnyMesice包含actionListener,用于查找推送JButton的poznamkaDne值。 我有一个Gui类,它创建了上述类DnyMesice的一个实例和JTextArea的一个实例。 如果某个JButton(在类DnyMesice中)被按下,我如何刷新JTextArea(名称为poznamkovePole)的值 public class DnyMesice extends J

我有类DnyMesice,它创建了许多JButton实例。每个实例都包含变量poznamkaDne。此类DnyMesice包含actionListener,用于查找推送JButton的poznamkaDne值。 我有一个Gui类,它创建了上述类DnyMesice的一个实例和JTextArea的一个实例。 如果某个JButton(在类DnyMesice中)被按下,我如何刷新JTextArea(名称为poznamkovePole)的值

public class DnyMesice extends JPanel {
    public String poznamkaDne="first note";
    jButton tlacitkoDen;

    public void zobrazMesic(Calendar kalendar){
        for (c=1; c<30; c++){
                tlacitkoDen = new JButton(Integer.toString(denvMesici));
                 tlacitkoDen.addActionListener(new ActionListener(){
                     public void actionPerformed(ActionEvent evt) {
                         poznamkaDne="New note";
                     };
                 });
                 add(tlacitkoDen);
        }
    }
}

现在,该程序在JTextArea中只显示“第一个注释”(在创建实例JButton时定义),但在ActionListener操作后刷新它会很热?

如果您使用:

添加到DnyMesice JTextArea链接并在ActionListener中更改文本

public class DnyMesice extends JPanel {
    private JTextArea poznamkaDne;
    jButton tlacitkoDen;

    public DnyMesice (JTextArea jTextArea){
        this.poznamkaDne = jTextArea;
    }

    public void zobrazMesic(Calendar kalendar){
        for (c=1; c<30; c++){
                tlacitkoDen = new JButton(Integer.toString(denvMesici));
                 tlacitkoDen.addActionListener(new ActionListener(){
                     public void actionPerformed(ActionEvent evt) {
                         poznamkaDne.setText("New note");
                     };
                 });
                 add(tlacitkoDen);
        }
    }
}
公共类DnyMesice扩展了JPanel{
波兹纳姆卡德内私人住宅区;
特拉西特科登;
公共Dnymesic(JTextArea JTextArea){
this.poznamkaDne=jTextArea;
}
公共空间(日历kalendar){
对于(c=1;c修改如下:

// add these methods
public void setPoznamkaDne(String s) {
    poznamkaDne = s;
}

public String getPoznamkaDne() {
    return poznamkaDne;
}

// CHANGE this method (KEEP the rest of the code!)
public void actionPerformed(ActionEvent evt) {
    setPoznamkaDne("New note");
};

poznamkovePole.setText(panel2.getPoznamkaDne());

这些更改应该允许您更新文本。但是您需要以某种方式调用
poznamekovePole.setText()
,或者实现一个高级侦听器类。我建议您组合您的类,如上面所说的@Too Strong Magic。

尝试调用
poznamekovePole.repaint()
actionPerformed
方法的末尾。它不起作用。类Dnymesic不知道Poznamkovelope。它是在类Gui中创建的,类Gui创建Dnymesic的实例。不幸的是,ActionListener在类Dnymesic中,如果它与Poznamkovelope在同一个类中,则会容易得多。
// add these methods
public void setPoznamkaDne(String s) {
    poznamkaDne = s;
}

public String getPoznamkaDne() {
    return poznamkaDne;
}

// CHANGE this method (KEEP the rest of the code!)
public void actionPerformed(ActionEvent evt) {
    setPoznamkaDne("New note");
};

poznamkovePole.setText(panel2.getPoznamkaDne());