当前位置: 首页 > 知识库问答 >
问题:

如何在Java中从另一个类更新jLabel或setText?

党博超
2023-03-14

我试图创建一个JFrame,其中有JLabel和按钮,并在另一个类中创建了一个方法PuttextNow,该方法将文本设置为JLabel。我已经读到,它应该使用多线程,这是更复杂的在我的部分。以下是我的代码:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    NewClass nc = new NewClass();
    nc.putTextNow();
}
package test1;

public class NewClass {
    public void putTextNow () {
        NewJFrame nf = new NewJFrame();
        nf.jLabel1.setText("OK!");
    }
}
public NewJFrame() {
    initComponents();
}

@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    jLabel1 = new javax.swing.JLabel();
    jButton1 = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jLabel1.setText("jLabel1");

    jButton1.setText("jButton1");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton1ActionPerformed(evt);
        }
    });

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(114, 114, 114)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGroup(layout.createSequentialGroup()
                    .addGap(23, 23, 23)
                    .addComponent(jButton1)))
            .addContainerGap(179, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(96, 96, 96)
            .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(43, 43, 43)
            .addComponent(jButton1)
            .addContainerGap(65, Short.MAX_VALUE))
    );

    pack();
}// </editor-fold>                        

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    NewClass nc = new NewClass();
    nc.putTextNow();
}                                        

public static void main(String args[]) {
    /* Set the Nimbus look and feel */
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */
    try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //</editor-fold>

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new NewJFrame().setVisible(true);
        }
    });
}

// Variables declaration - do not modify                     
public javax.swing.JButton jButton1;
public javax.swing.JLabel jLabel1;
// End of variables declaration                   

//newclass.java

    package test1;

public class NewClass{public void putTextNow(){
NewJFrame nf=new NewJFrame();nf.jlabel1.settext(“ok”);}}

共有1个答案

戎洛华
2023-03-14
NewJFrame nf = new NewJFrame();
nf.jLabel1.setText("OK!");

NewClass类中,您正在创建NewJFrame的新实例。您正在尝试更新一个不在当前JFrame中的标签(您所看到的那个)。您必须从newjframe传递对jlabel的引用,并从那里进行更新:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    NewClass nc = new NewClass();
    nc.putTextNow(myJLabel);
}

newclass变为

public class NewClass {
    public void putTextNow (JLabel label) {
        label.setText("OK!");
    }
}
 类似资料:
  • 问题内容: 亲爱的大家,我遇到了挥杆相关的问题。由于违反公司政策,我无法共享代码,因此我将尽力解释该问题。 简而言之,我创建了一个扩展包含JLabel的JWindow的类。JLabel的文本是通过计时器对象随机更新的,该计时器对象使用scheduleAtFixedRate方法每50毫秒实例化一个TimerTask。JLabel中的值是通过在一个单独的线程(称为传输线程)中调用一个方法来检索的,该线

  • 我想在构造函数外部或从另一个类更新已创建控件的JLabel。在这里,我创建了一个控件,并在构造函数中添加了一些组件。UI是在main中创建的,但是我想更新这个类之外的一些标签。所以我创建了setResult(最终字符串文本,最终字符串路径)来做这样的事情,但它不起作用。。。。 我的问题是setResult不起作用。我不知道为什么。有人能帮忙吗?谢谢

  • 问题内容: 因此,我一直在试图弄清楚这一点,却无法弄清楚如何做到这一点。我希望另一个类中的按钮之一可以更改GUI类中JLabel的文本。 这是来自GUI类的代码:`import java.awt.Container; 这里是尝试更改JLabel“错误”的按钮中的代码: 问题答案: 首先,添加具有访问权限的吸气剂,以便您的第二堂课可以访问该字段。就像是, 或(如@MadProgrammer在评论中建

  • 我有两个类和一个文本文件数据库,第一个类中的,我们将其称为自动设置为数据库中的数字。现在,在中,我有一个小的和一个文本字段,当然还有一个按钮,我在文本字段中的值会覆盖数据库中的值,但问题出在这里。第一个类中的标签在运行时不会更新,但如果我重新启动它,它会显示我想要的值。 如何在程序运行时更新它?我尝试在另一个类的中更改标签,但它每次都给我一个。 我怎么解决这个? 我希望这让我更容易理解我的问题。这

  • 我想做一个应用程序,当我按下AddTask类中的save按钮时,文本输入中的文本将直接更新到Details类中的标签,但我所做的在那里不起作用…有谁能帮我一下吗?

  • 问题内容: 我正在使用SWT编写桌面应用程序。从另一个线程更新GUI控件的最简单方法是什么? 问题答案: 根据需要使用Display.asyncExec或Display.syncExec。 例如,另一个线程可能调用此方法来安全地更新标签: 这里更多