2013-03-30 35 views
2

我有兩個類,第一個是NewJFrame.java。它的代碼是 -如何從其他類訪問jFrame的組件?

package javaapplication10; 
import java.awt.Label; 
public class NewJFrame extends javax.swing.JFrame { 

    public NewJFrame() { 
     initComponents(); 
    } 



    private void initComponents() { 

     jButton1 = new javax.swing.JButton(); 
     f = new javax.swing.JTextField(); 
     l = new java.awt.Label(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

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

     l.setText("label1"); 

     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(139, 139, 139) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addComponent(f, javax.swing.GroupLayout.PREFERRED_SIZE, 76, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) 
         .addComponent(l, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
         .addComponent(jButton1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) 
       .addContainerGap(185, Short.MAX_VALUE)) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(f, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(18, 18, 18) 
       .addComponent(jButton1) 
       .addGap(22, 22, 22) 
       .addComponent(l, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addContainerGap(186, Short.MAX_VALUE)) 
     ); 

     pack(); 
    } 

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
     System.out.println("Calling"); 
     NewClass1 n = new NewClass1(); 
     n.st(); 

    }           



    public static void main(String args[]) { 

     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); 
     } 



     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new NewJFrame().setVisible(true); 
      } 
     }); 
    } 

    protected javax.swing.JTextField f; 
    protected javax.swing.JButton jButton1; 
    protected java.awt.Label l; 

} 

我正在使用netbeans。碼的主要 線 -

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
      System.out.println("Calling"); 
      NewClass1 n = new NewClass1(); 
      n.st(); 

     } 

和變量聲明

protected javax.swing.JTextField f; 
protected javax.swing.JButton jButton1; 
protected java.awt.Label l; 

我的第二類是NewClass.java及其代碼是 - 包javaapplication10;

import java.awt.Label; 
public class NewClass1 extends NewJFrame{ 

    public void st() 

    { 
     l.setText(f.getText()); 
    } 

} 

我想要做的就是按一下按鈕(的jButton1),並寫在文本框(六)必須在標籤(L)設置的文本。 當我點擊按鈕「調用」打印在控制檯上但標籤上的文本沒有改變。問題是什麼?請幫忙。

+0

對不起'tf'是錯的。它的'f'只。我編輯了這個問題。 –

+1

1)參見[使用多個JFrames,好/壞實踐?](http://stackoverflow.com/a/9554657/418556)2)'import java.awt.Label; public class NewJFrame extends javax.swing.JFrame {' 除非必要,否則不要混合使用Swing('JFrame')和AWT('Label')組件。在這種情況下,使用'JLabel'而不是'Label'。 3)除非必要,否則不要擴展框架(或對話框)。在這種情況下,只需使用組件的一個實例。 –

回答

2

爲什麼不直接更改文本JLabell?在下列方式:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) 
{           
    System.out.println("Calling"); 
    //NewClass1 n = new NewClass1(); 
    //n.st(); 
    l.setText(f.getText()); 
}  

UPDATE
確定這裏ü去,如果你想通過子類來做到這一點:

變化jButton1ActionPerformed以這種方式:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) 
{           
    System.out.println("Calling"); 
    NewClass1 n = new NewClass1(this); 
    n.st(); 
} 

而變化NewClass的構造函數如下:

NewJFrame njf; 
public NewClass(NewJFrame jf) 
{ 
    this.nfj = jf; 
} 
public void st() 
{ 
    nfj.l.setText(nfj.f.getText()); 
} 
+0

我想通過使用另一個類來完成它。 (繼承) –

+0

@AjaySainy查看我的編輯 –

+0

Thankyou ...它的工作。你可以請解釋或提供一些鏈接來閱讀它? –