2015-05-14 40 views
1

只是爲了說明問題,我在Netbeans中使用了JFrame表單。JFrame:在構造函數中更改值後字符串變回爲空

好吧,所以基本上我試圖改變一個公共全局字符串(PictureName)使用構造函數的值,因爲我試圖從另一個類取另一個值,但是當我嘗試在我的JLabel代碼,它顯示爲空。下面是代碼

public class ShowPage extends javax.swing.JFrame { 

public javax.swing.JLabel Picture; 
public String PictureName; 

public ShowPage() { 
    initComponents(); 

} 

public ShowPage (String picName){ 
    PictureName = picName; 
} 


private void initComponents() { 
Picture = new javax.swing.JLabel(); 
getContentPane().add(Picture); 
    Picture.setBounds(20, 60, 300, 130); 
    Picture.setIcon(new javax.swing.ImageIcon(getClass().getResource("/MiniProject/imagesMain/"+PictureName))); 

pack(); 
} 

在構造函數中爲什麼PictureName甚至在更改後仍然無效任何想法(是的,它是用SOP檢查)?

這是PSVM BTW

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(ShowPage.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (InstantiationException ex) { 
     java.util.logging.Logger.getLogger(ShowPage.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (IllegalAccessException ex) { 
     java.util.logging.Logger.getLogger(ShowPage.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
     java.util.logging.Logger.getLogger(ShowPage.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 ShowPage().setVisible(true); 
     } 
    }); 
+0

你有兩個獨立的構造函數:一個沒有參數,調用'的initComponents( )'和一個採用一個參數並將'PictureName'設置爲參數中的值。 – GiantTree

回答

1

你調用無參數的構造函數,而不是一個拍攝照片的名稱作爲參數。在main你應該叫:

public void run() { 
    new ShowPage(pictureName).setVisible(true); 
} 

其中pictureName是存儲照片的文件名可變。

構造函數也需要調用initComponents()就像無參數的構造函數:

public ShowPage (String picName) { 
    PictureName = picName; 
    initComponents(); 
} 
+1

'initComponents'也需要被添加到字符串參數構造函數中。 – npinti

+0

非常感謝。我一直堅持這幾天,問我的老師和朋友。我有點新JFrame。再次感謝 :) – Tephrite

0

它拋出一個空事件,因爲你從來沒有初始化您的變量。

在你的main中,你調用了無參數的構造函數,這意味着PictureName永遠不會被創建。

你應該試試這個

java.awt.EventQueue.invokeLater(new Runnable() { 
    public void run() { 
     new ShowPage("image.png").setVisible(true); 
    } 
}); 

在這之後,你應該在你ShowPage(String picName)構造方法添加initComponent(),或者它永遠不會被調用。

public ShowPage (String picName){ 
    PictureName = picName; 
    this.initComponent(); 
} 

其他一些建議:

  • 而是寫javax.swing.JFrame的,只是在你的文件的頂部添加進口import javax.swing.JFrame;甚至import javax.swing.*;從導入所有類包裝(如JLabel

  • 一定要第一個字符寫你的變量小寫,這是programmation的基本規則:PictureName - >pictureName

相關問題