2012-02-21 2 views
2

Довольно распространенная проблема, с которой я сталкиваюсь, - это то, где у меня есть некоторые поля, и я хочу ссылаться на них через класс, который является , производным, инициализированным из класса полей. Позвольте мне уточнить.Глобальные поля для классов

Class Diagram

У меня есть эти три класса, который унаследован от основного класса. Каждый класс имеет метод, который взаимодействует с полем. В этом случае a имеет JFrame, который вызывает класс (JPanel) и добавляет его в область содержимого.

Я нашел это путем передачи ссылки объекта, который класс Frame создает для конструктора класса Panel. И ссылайтесь на них через это.

Есть ли более эффективный способ? Как создать глобальные поля или методы для всех производных классов? В этом случае они являются компонентами основного класса?

UPDATE

Что-то вроде этого.

import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class JFrame1 extends JFrame { 

    protected String field1; 
    protected String field2; 

    public JFrame1() { 
     add(new Panel1()); 
    } 
} 

class Panel1 extends JPanel { 

    public Panel1() { 

     // field1 = "String"; Wrong 
     } 
    } 

Я знаю, что могу гнездо class Panel1 внутри public class Frame1 и проблема будет решена, но что, если я хочу двух классов в разных файлах?

+0

что вы имеете в виду _derived_? –

+0

@Qwe Я имел в виду, что они созданы/инициализированы/вызваны. Я не знаю точного слова, которое я должен использовать. –

+0

easies должны были написать, что, отвечая на ваш вопрос, пожалуйста, отредактируйте свой вопрос с помощью [SSCCE] (http://sscce.org/), в противном случае есть некоторые веб-страницы, на которых вы можете отправить заказ, основанный на картинке с платежами – mKorbel

ответ

0

Хорошо, я нашел способ.

Класс Рама

import javax.swing.JFrame; 

public class JFrame1 extends JFrame { 

    private String field1; 

    public JFrame1() { 
     add(new PanelA()); 
    } 

class PanelA extends Panel1 { 

    @Override 
    public String getField1() { 
     return field1 
    } 
} 

Создать интерфейс

public interface Connector { 
    public String getField1(); 
} 

И класс ПАНЕЛЬ1

import javax.swing.JPanel; 

public abstract class Panel1 extends JPanel implements Connector { 

    field1 = getField1(); 
} 
2

три класса, которые производятся от основного класса - что это значит? Ваши три класса получают (расширяют) JPanel, и в нем нет никаких полей.

Если вы спрашиваете, как ваши три класса должны получить доступ к полям из Frame1, который предположительно является их контейнер - то вы должны использовать getParent(), чтобы получить ссылку на родительский класс, проверьте, если он Frame1 и если да - получить доступ к его полям ,

+0

You пишут 'как мои три класса получают доступ к полям из Frame1'. Я использую 'getParent()', но я не могу передать JPanel в класс Frame1. –

+0

согласился с вашим выстрелом в темное +1 – mKorbel

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