2015-01-12 2 views
1

У меня есть три класса. Один из них - рабочий класс, который выполняет всю тяжелую работу, но ничего не отображает. Остальные два - это классы GUI, один из которых вызывает другой. Тот, который вызывает второй класс GUI, имеет рабочий класс open.Общение между открытыми классами

Первый GUI вызывает второй с этим методом:

protected void openAdd() { 

     AddPet add = new AddPet(ADD_PROMPT, FIELDS, DATE_PROMPT); 
     add.setVisible(true); 
    } 

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

Что мне нужно сделать, это передать эту информацию во втором графическом интерфейсе обратно в первый графический интерфейс, чтобы он мог работать с ним и передать его классу open worker.

Как это сделать?

EDIT: Я думаю, что лучшим вариантом было бы вызвать метод в первом графическом интерфейсе из второго графического интерфейса, но я не знаю, возможно ли это.

+1

М-В-С является путь. Используйте одну модель для всех, и оба графического интерфейса отображают свои представления на основе состояния модели. –

+1

Вы можете передать ссылку класса «рабочий» во второй класс GUI ... Попытайтесь уменьшить экспозицию своих классов, если только второй класс GUI не должен знать о первом классе GUI, я бы не стал подвергать его воздействию , так как это объединяет код вместе, который вам не нужен, и предоставляет первый класс GUI потенциально нежелательным изменениям. – MadProgrammer

+0

'' Я думаю, что лучшим вариантом было бы вызвать метод в первом графическом интерфейсе из второго графического интерфейса, t знать, возможно ли это возможно. "-" GUI "- объекты, чистые и простые. Любой объект может вызывать открытый метод другого объекта, если он имеет правильную ссылку. Опять же, я по-прежнему считаю, что ваш лучший вариант - использовать структуру M-V-C, но, как и в большинстве случаев, дьявол существует в деталях. Если вам нужна более конкретная помощь, тогда вы сначала сообщите нам больше подробностей и покажите нам свой соответствующий код, желательно как [минимальная примерная программа или MCVE] (http://stackoverflow.com/help/mcve). –

ответ

1

С другой стороны, похоже, что ваше второе окно используется, по существу, как диалог в первом окне и что вы используете его для ввода пользовательских данных и еще немного. Если это так, убедитесь, что второе окно не является JFrame, а скорее модальным JDialog. Если это так, то это заблокирует взаимодействие с первым окном, когда оно будет открыто, и извлечение информации из него будет легко, так как вы знаете точно, когда пользователь с этим закончил, так как поток программы возобновится в первый графический интерфейс сразу после вашего кода, который устанавливает второе окно visibile.

например,

// in this example, AddPet is a modal JDialog, not a JFrame 
protected void openAdd() { 
    // I'm passing *this* into the constructor, so it can be used ... 
    // ... in the JDialog super constructor 
    AddPet add = new AddPet(this, ADD_PROMPT, FIELDS, DATE_PROMPT); 
    add.setVisible(true); 

    // code starts here immediately after the AddPet modal dialog is no longer visible 
    // so you can extract information from the class easy: 

    String petName = add.getPetName(); // I know you don't use these exact methods 
    String petBreed = add.getPetBreed(); // but they're just a "for instance" type of code 
    // ... etc 

} 

....

+0

Да. После прочтения ссылки, которую вы указали, очевидно, что я должен был использовать JDialog, а не JFrame. Теперь посмотрим, как конвертировать мой код. –

+2

@DracoTBastard: если честно, у меня редко есть код, расширяющий JFrame или JDialog. Большая часть моего GUI или кода «view» создает JPanels или расширяет JPanels. Затем они могут быть помещены в JFrames или JDialogs или JTabbedPanes или заменены через CardLayouts, где это необходимо. Я считаю, что это значительно увеличило гибкость моего графического интерфейса. –

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