有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在另一个类中执行某些操作时刷新该类的实例

我有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) 个答案

  1. # 1 楼答案

    修改如下:

    // 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(),或者实现一个高级侦听器类。我建议你把你的课结合起来,比如上面说的“太强的魔法”

  2. # 2 楼答案

    如果你能使用:

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

    另外,请不要忘记使用Code Conventions for the Java