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

时间:2014-02-13 12:50:17

标签: java swing variables actionlistener

我有类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);
        }
    }
}

public class Gui extends JFrame {
    ...
    public void zobrazKalendar(){
    ...
    panel3 = new JPanel(); 
    panel3.setLayout(new FlowLayout());
    add(panel3);

    JTextArea poznamkovePole; 
    poznamkovePole = new JTextArea();
    poznamkovePole.setColumns(30);
    poznamkovePole.setRows(5);
    poznamkovePole.setText(panel2.poznamkaDne);
    panel3.add(poznamkovePole);

    }

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

2 个答案:

答案 0 :(得分:0)

如果您愿意,可能会更好:

添加到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);
        }
    }
}

P.S。 - 请不要忘记使用Code Conventions for the Java

答案 1 :(得分:0)

修改如下:

// 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上面说的那样组合你的课程。