2016-04-12 6 views
0

私は2つのクラスを持っています.1つはファイル内のテキストを読み込み、データを配列に入れ、メインクラスに配列の内容をJComboBoxに追加したいクラスです。しかし、私は "変数に解決することはできません"というエラーが表示されています。JComboBoxに配列の内容を表示する

readfiles.java

public class readfiles { 
String [] names = new String[15]; 
int i = 0; 
public Scanner readNames; 

//Opens the file 
public void openFile() { 
    try { 
     readNames = new Scanner(new File("ChildName.txt")); 
    } catch (Exception e) { 
     System.out.println("Could not locate the data file!"); 
    } 
} 

//Reads the names in the file 
public void readFile() { 
    while(readNames.hasNext()) { 
     names[i] = readNames.next(); 
     System.out.println(Arrays.toString(names)); 
     System.out.println(names[i]); 
     i++; 
    } 
} 

//Closes the file 
public void closeFile() { 
    readNames.close(); 
} 

}

Main.java

//JComboBox for selecting child 
    JLabel selectChildName = new JLabel("Please Select Your Child:"); 
    sPanel.add(selectChildName); 
    JComboBox<String> selectChild = new JComboBox<String>(names); // (names); is the error, cannot be resolved to a variable 
       sPanel.add(selectChild); 
+1

'名前'は 'readFiles'クラスのみにコンテンツを持っていますので、' Main'クラスがそれを参照するための何らかの方法、例えばゲッターなどが必要です。 「Java TMプログラミング言語のためのコード表記規則」(http://www.oracle.com/technetwork/java/codeconvtoc-136057.html)を読んでみると、読者が読んだほうが簡単になりますコードを読んで他の人を読む – MadProgrammer

+0

あなたはこの質問をもう一度尋ねるのは悔しいことです。参照:http://stackoverflow.com/questions/36552223/adding-data-to-a-jcomboboxこれを行うために配列を使うのは良い解決策ではありません。ファイルから読み込むときに配列をどのくらい大きくするか分からないので、このような目的で配列を使用することは決して良い考えではありません。乱数を選ぶことは、柔軟な設計ではありません。そのため、アイテムをコンボボックスに直接追加するソリューションが提供されました。コンボボックスをreadFile()メソッドに渡し、addItem()メソッドを使用するだけです。または、ロードされたコンボボックスを返すこともできます。 – camickr

+0

また、これはスペースの無駄です。コンボボックスを作成すると、配列内の項目がArrayからDefaultComboBoxModelにコピーされます。アイテムをコンボボックスに直接ロードすると、それらはモデルに追加されたばかりです。 – camickr

答えて

1

あなたは、そのないメインの範囲にメインでvairable名にアクセスすることができません。これにアクセスするには、readfilesクラスのインスタンスを作成し、次にinstance.namesを実行して名前を取得します。例えば

readfiles instance = new readfiles(); 
instance.openfile(); 
instance.readfile(); 
instance.closefile(); 
JComboBox<String> selectChild = new JComboBox<String>(instance.names); 
+1

'closeFile'を呼び出すことを忘れないでください...なぜそれが' readFile'ですべて行われたのではないのですかbeydon me – MadProgrammer

+0

良いキャッチが今修正されました。 –

+0

さて、私は理解しています、ありがとう。 –

0

名変数はreadFilesクラスの変数と自分のメインクラスのように表示されません。配列を必要に応じて取得するには、readFilesでgetterメソッドを呼び出す必要があります。

関連する問題