简体   繁体   English

如何从其他方法访问JLabel?

[英]How to access a JLabel from another method?

I'm working on a GUI application and what i want my code to do is that after clicking the sole button that you can perceive in my swing-based GUI, the 2 jLabels present within it make the String "Working" perceivable to the user. 我正在开发一个GUI应用程序,我想让我的代码执行的操作是,单击您可以在基于swing的GUI中看到的唯一按钮后,其中包含的2个jLabel使用户可以感知字符串“工作” 。 Here's my code: 这是我的代码:

public class DiligentGUI extends javax.swing.JFrame {

public DiligentGUI() {
    initComponents();
}
void a()
{
  fahrenheitLabel.setText("Working");  
}

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

    tempTextField = new javax.swing.JTextField();
    celsiusLabel = new javax.swing.JLabel();
    convertButton = new javax.swing.JButton();
    fahrenheitLabel = new javax.swing.JLabel();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    setTitle("Celsius Converter");

    tempTextField.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            tempTextFieldActionPerformed(evt);
        }
    });

    celsiusLabel.setText("Celsius");

    convertButton.setText("Convert");
    convertButton.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            convertButtonActionPerformed(evt);
        }
    });

    fahrenheitLabel.setText("Fahrenheit");

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addComponent(tempTextField,  
javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,  
javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGap(12, 12, 12)
                    .addComponent(celsiusLabel))
                .addGroup(layout.createSequentialGroup()
                    .addComponent(convertButton)


.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                    .addComponent(fahrenheitLabel)))
            .addContainerGap(59, Short.MAX_VALUE))
    );

    layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {convertButton, tempTextField});

    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(tempTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(celsiusLabel))
            .addGap(18, 18, 18)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(convertButton)
                .addComponent(fahrenheitLabel))
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );

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

private void tempTextFieldActionPerformed(java.awt.event.ActionEvent evt) {                                              
    // TODO add your handling code here:
}                                             

private void convertButtonActionPerformed(java.awt.event.ActionEvent evt) {                                              

DiligentGUI b = new DiligentGUI();
b.a();
celsiusLabel.setText("Working");
}                                             

/**
 * @param args the command line arguments
 */
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(DiligentGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(DiligentGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(DiligentGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(DiligentGUI.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 DiligentGUI().setVisible(true);
        }
    });
}

// Variables declaration - do not modify                     
private javax.swing.JLabel celsiusLabel;
private javax.swing.JButton convertButton;
private javax.swing.JLabel fahrenheitLabel;
private javax.swing.JTextField tempTextField;
// End of variables declaration                   

} }

As you can see, there are 2 jLabels inside this: fahrenheitLabel and celsiusLabel. 如您所见,其中有2个jLabel:fahrenheitLabel和celsiusLabel。 I've created an auxiliary method dubbed as 'a' that should change the status of fahrenheitLabel to "Working". 我创建了一个称为“ a”的辅助方法,该方法应将fahrenheitLabel的状态更改为“正在工作”。 I'm unable to realize the desired output. 我无法实现所需的输出。 Any suggestions? 有什么建议么?

This is not happening because you are creating another object of class DiligentGUI in your convertButtonActionPerformed method. 不会发生这种情况是因为您在convertButtonActionPerformed方法中创建了DiligentGUI类的另一个对象。 This is creating another JFrame . 这将创建另一个JFrame You cannot see it coz you did not set it visible by d.setVisible(true) . 您看不到它,因为您没有通过d.setVisible(true)将其设置为可见。

Make this change in your 在您的位置进行更改

private void convertButtonActionPerformed(java.awt.event.ActionEvent evt) {                                              

    a();  // This will call the a() method in the current running instance. 
    celsiusLabel.setText("Working");
}                                             

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM