Как открыть модальный диалог в Java апплет?

Я пытаюсь отобразить модальное диалоговое окно перед апплетом .

Мое текущее решение извлекает корневой фрейм следующим образом:

Frame getMyParent() {
    Container parent = getParent();
    while (!(parent instanceof Frame)) {
        parent = ((Component)parent).getParent();
    }
    return (Frame)parent;
}

И создает диалоговое окно выглядит следующим образом:

public OptionsDialog(MainApplet applet, boolean modal) {
    super(applet.getMyParent(), "options", modal);
    // ....

Однако часто это показывает модальное диалоговое окно под фреймом, хотя модальное поведение работает правильно.

Как это можно исправить?

В идеале это должно быть для Java версии 1.5 и выше. from test.user импортировать пользователя if __name__ == '__main__': u = user () t = team () u.setTeam (t) t.setLeader (u) ...

Рассмотрим python (3.x) скрипты:

main.py:

from test.team import team
from test.user import user

if __name__ == '__main__':
    u = user()
    t = team()
    u.setTeam(t)
    t.setLeader(u)

test / user.py:

from test.team import team

class user:
    def setTeam(self, t):
        if issubclass(t, team.__class__):
            self.team = t

test / team.py:

from test.user import user

class team:
    def setLeader(self, u):
        if issubclass(u, user.__class__):
            self.leader = u

Теперь, конечно, у меня есть циклический импорт и великолепная ImportError.

Итак, не будучи питонистом, у меня три вопроса. Прежде всего:

i. Как заставить эту штуку работать?

И, зная, что кто-то неизбежно скажет «Циркулярный импорт всегда указывает на проблему дизайна», возникает второй вопрос:

ii. Чем плох этот дизайн?

И наконец, третий:

iii. Что было бы лучшей альтернативой?

Чтобы быть точным, проверка типов, как указано выше, является только примером, есть также индексный уровень, основанный на классе, который разрешает, т.е. найти всех пользователей, являющихся членами одной команды (класс пользователя имеет много подклассов, поэтому индекс удваивается, для пользователей в целом и для каждого конкретного подкласса) или все команды, указавшие пользователя в качестве члена

Изменить:

Я надеюсь, что более подробный пример прояснит, чего я пытаюсь достичь. Файлы опущены для удобства чтения (но наличие одного исходного файла размером 300 КБ меня как-то пугает, поэтому предположим, что каждый класс находится в другом файле)

# ENTITY

class Entity:
    _id    = None
    _defs  = {}
    _data  = None

    def __init__(self, **kwargs):
        self._id   = uuid.uuid4() # for example. or randint(). or x+1.
        self._data = {}.update(kwargs)

    def __settattr__(self, name, value):
        if name in self._defs:
            if issubclass(value.__class__, self._defs[name]):
                self._data[name] = value

                # more stuff goes here, specially indexing dependencies, so we can 
                # do Index(some_class, name_of_property, some.object) to find all   
                # objects of some_class or its children where
                # given property == some.object

            else:
                raise Exception('Some misleading message')
        else:
            self.__dict__[name] = value    

    def __gettattr__(self, name):
        return self._data[name]

# USERS 

class User(Entity):
    _defs  = {'team':Team}

class DPLUser(User):
    _defs  = {'team':DPLTeam}

class PythonUser(DPLUser)
    pass

class PerlUser(DPLUser)
    pass

class FunctionalUser(User):
    _defs  = {'team':FunctionalTeam}

class HaskellUser(FunctionalUser)
    pass

class ErlangUser(FunctionalUser)
    pass

# TEAMS

class Team(Entity):
    _defs  = {'leader':User}

class DPLTeam(Team):
    _defs  = {'leader':DPLUser}

class FunctionalTeam(Team):
    _defs  = {'leader':FunctionalUser}

, а теперь некоторые варианты использования:

t1 = FunctionalTeam()
t2 = DLPTeam()
t3 = Team()

u1 = HaskellUser()
u2 = PythonUser()

t1.leader = u1 # ok
t2.leader = u2 # ok
t1.leader = u2 # not ok, exception
t3.leader = u2 # ok

# now , index

print(Index(FunctionalTeam, 'leader', u2)) # -> [t2]
print(Index(Team, 'leader', u2)) # -> [t2,t3]

Итак, он отлично работает (детали реализации опущены, но есть ничего сложного) кроме этой нечестивой круговой импортной штуки.

46
задан CharlesB 25 February 2013 в 15:24
поделиться