2016-04-12 3 views
0

У меня есть два класса: один с классом, который читает текст в файле и помещает данные в массив, а в основном классе я хочу добавить содержимое массива в 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

'names' имеет контент только для класса' readFiles', вам нужно каким-то образом для вашего класса 'Main' ссылаться на него, например, на getter. Возможно, вам захочется прочитать [Кодовые обозначения для языка программирования Java TM] (http://www.oracle.com/technetwork/java/codeconvtoc-136057.html), это облегчит для людей возможность читать ваши код и для вас читать другие – MadProgrammer

+0

Его разочарование в том, что вы снова задаете этот вопрос. См. Http://stackoverflow.com/questions/36552223/adding-data-to-a-jcombobox. Это нехорошее решение для использования массива. Никогда не рекомендуется использовать Array для чего-то вроде этого, потому что вы никогда не знаете, как большой сделать массив при чтении из файла. Выбор случайного числа не является гибким дизайном. Вот почему вам было предоставлено решение для добавления элементов в поле со списком напрямую. Все, что вам нужно сделать, это передать combo Box в метод readFile() и использовать метод addItem(). Или вы можете вернуть загруженное поле со списком. – camickr

+0

Кроме того, это пустая трата пространства. Когда вы создадите поле со списком, элементы в массиве будут скопированы из массива в 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' is beydon me – MadProgrammer

+0

Уловка исправлена. –

+0

Хорошо, теперь я понимаю, спасибо. –

0

имена переменных является переменной класса readFiles и, таким образом, не видно в главном классе. Вам нужно вызвать метод getter на readFiles, чтобы получить массив, когда вам это нужно.

Смежные вопросы