2011-12-23 3 views
2

Эй Я пытаюсь получить доступ к объекту, который я создал в основном методе из другого класса, но когда я ссылаюсь на него в другом классе, он не распознается. После некоторых исследований я думаю, что это имеет какое-то отношение к модификаторам доступа, но я попытался сделать объект общедоступным только для появления комментария, говорящего «удалить недействительный модификатор». Любые указатели?Доступ к объектам, сделанным в основном методе из других классов

Извините, что это так просто, но я всего лишь новичок, и я нахожу этот материал довольно жестким.

Извините, что не упоминает! Я пишу на Java. Это то, что у меня есть:

public static void main(String[] args) { 

    Mainframe mainframe = new Mainframe(); 
    mainframe.initialiseMF();  
    LoginPanel lp = new LoginPanel(); 
    mainframe.add(lp); 
} 

public class Mainframe extends JFrame { 

public Mainframe() { 
    // Set size of mainframe 
    setBounds(0, 0, 500, 500); 

} 

public void initialiseMF(){ 
    // Get the size of the screen 
    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); 

    // Determine the new location of the mainframe 
    int w = getSize().width; 
    int h = getSize().height; 
    int x = (dim.width-w)/2; 
    int y = (dim.height-h)/2; 

    // Move the mainframe 
    setLocation(x, y); 
    setVisible(true); 
} 

}

Я пытаюсь сделать это заявление в другом классе:

Container content = mainframe.getContentPane(); 
+1

На каких языках вы пишете? Можете ли вы привести простой пример? –

+1

Оставьте какой-либо код, пожалуйста, или все будут только гадать. –

+0

Не могли бы вы разместить больше кода другого класса? Что вы намерены делать с областью содержимого вашего мэйнфрейма в этом другом классе? Если вы хотите добавить что-то в пользовательский интерфейс, сделайте это в Mainframe. –

ответ

0

Remember, объект мэйнфреймов является локальным для метода Main(), который является статическим. Вы не можете получить доступ к нему за пределами класса.

Возможно, это было бы немного чище.

public class Mainframe extends JFrame{ 
    public Mainframe(){ 
      initialiseMF(); 
    } 

    public void initialiseMF(){ 
      //do ur inits here 
    } 

} 

Тогда сделайте это,

public class TheOtherClass{ 

    private Mainframe mainFrame; 

    public TheOtherClass(){ 
     mainFrame = MainFrame.mainFrame; //although I would not suggest this, it will avoid the Main.mainFrame call 
    } 

    public void otherMethodFromOtherClass(JFrame mainFrame){ 
     Container content = mainFrame.getConentPane(); 
    } 
} 
+0

Спасибо за помощь! Я пытаюсь переключаться между экранами моей программы, начиная с пустого кадра (Mainframe) и добавляя/удаляя из него панели, если необходимо, для отображения разных экранов. Я создал класс Mainframe, расширив класс JFrame и написал код, чтобы центрировать его на экране. Я хочу добавить панель на мейнфрейм, который я создаю. Ahh Я, кажется, исправил это, изменив его на Main.mainframe.getContentPane() - можно ли каким-либо образом избежать ссылок на Main, хотя? – user1058210

+0

@ user1058210: вы можете увидеть обновленный ответ. Вы можете сохранить переменную как член в TheOtherClass – bragboy

0

Я не совсем уверен, что вы имеете в виду под «объектом», но я просто предполагаю, что вы имеете в виду переменную.

Для того чтобы переменная, объявленная в классе, была доступна (каким-то образом, то есть непосредственно или через какой-либо метод) извне, она должна быть переменной-членом, а не локальной переменной.

например. местный (метод локальной) переменной:

//local variables are the ones that are declared inside a method 
//their life and visibility is limited only within the block in which they are define. 
public static void main(String[] args) { // args is also a local variable 
    String localVar = "Access modifiers are not allowed for local variables."; 
    //the reason that the access modifiers are not allowed is because 
    //the local variables are not members of the class   
} 

Это имеет смысл только, чтобы члены класса либо private, protected, пакет-частного или public.

например. переменная-член:

class AClass { 
    private String memberVar = "A member variable can have access modifier."; 
    //the access modifier will determine the visibility of that variable. 

    public String getMemberVar() { 
     return this.memberVar; 
    } 
} 
  1. частный Видимый только внутри класса. Вы можете сделать его доступным с помощью какого-либо общедоступного метода. Обычно называются геттерными методами.

  2. package-private: видимый только в пределах упаковки. Снова вы можете сделать его доступным вне пакета, используя какой-то общедоступный метод.

  3. защищен: отображается только внутри класса и его подклассов (не имеет значения, даже если подкласс находится вне упаковки).

  4. общественность: видимая везде.

+0

Мне нужно снова прочитать вопрос. Поскольку он обновлен. –

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