как начать, разработка приложения на основе свинга с несколькими панелями с кнопками «Далее» для каждой

Я новичок в java. Я создаю пользовательский интерфейс на основе свинга. Я создал 2 фрейма, каждый в отдельном файле .java внутри одного пакета.

Эти два кадра представляют собой 2 экрана (панели) приложения. При нажатии кнопки «Далее» в первом кадре она должна перейти ко второму кадру.

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

Когда нажимается «Далее», я пытаюсь установить setVisible (false) для основной панели первого фрейма и setVisible (true) для основной панели второго фрейма. Но этого делать нельзя, так как панели внутри класса являются приватными. Любое решение вышеуказанной проблемы?

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

Прочитав ответы, мои комментарии таковы:

Я использовал следующий код для перехода к следующей панели с первой панели, но это не сработало.

private void gotoNextPanel(){
//    jPanelFirstScreen.setVisible(false);
      JPanelSecondScreen jpanelSecondScreen= new JPanelSecondScreen();
      jpanelSecondScreen.setVisible(true);
      UpgradeUtilityGUI upgradeUtilityGUI = new UpgradeUtilityGUI();
      upgradeUtilityGUI.removeAll();
      validate();
      repaint();
//      upgradeUtilityGUI.add(jpanelSecondScreen);
            upgradeUtilityGUI.getContentPane().add(jpanelSecondScreen, "card2");
      jpanelSecondScreen.setVisible(true);
      validate();
      repaint();

    }

Я использую netbeans и добавил две панели в макет фрейма. И когда я использую приведенный выше код для смены панелей, ничего не происходит, первая панель все еще появляется. Может кто-нибудь сказать мне, как написать код для перехода с одной панели на другую, когда обе панели добавлены в карточку jFrame?


person merlachandra    schedule 07.04.2012    source источник
comment
1) После просмотра ответов, Мои комментарии: Мы не будем «уведомлены». Единственный способ узнать это для вас — добавить комментарий к каждому ответу. Я только что вернулся к этому, чтобы посмотреть, каков был результат после недавнего голосования. ;) 2) Чтобы быстрее получить помощь, опубликуйте SSCCE. Вы можете увидеть SSCCE в моем связанном ответе.   -  person Andrew Thompson    schedule 09.04.2012


Ответы (4)


Не используйте два или более JFrames, а также отдельные и скомпилированные Jar files, это дорога в ад, лучше посмотреть на CardLayout,

person mKorbel    schedule 07.04.2012
comment
ни с отдельным файлом Jar А? Обычно я делаю «один Jar на пакет», чтобы обеспечить более быстрое развертывание апплетов и JWS и (с JWS), чтобы разные пакеты имели разные уровни безопасности. - person Andrew Thompson; 07.04.2012

Используйте CardLayout, как показано здесьодин кадр), как упоминалось другими.

Вид игрыПросмотр результатов

Когда нажимается «Далее», я пытаюсь установить setVisible (false) для основной панели первого фрейма и setVisible (true) для основной панели второго фрейма. Но этого делать нельзя, так как панели внутри класса являются приватными. Любое решение вышеуказанной проблемы?

Сделайте панели public уровнем доступа и они будут доступны из других пакетов.


Одна из проблем в этом фрагменте кода подразумевается строкой:

UpgradeUtilityGUI upgradeUtilityGUI = new UpgradeUtilityGUI();  

Он выходит за рамки до того, как будет добавлен в контейнер. Кроме того, не нужно ничего удалять при добавлении новой карты в макет и не нужно вызывать repaint().

person Andrew Thompson    schedule 07.04.2012
comment
поскольку панели были созданы с использованием netbeans, по умолчанию для них установлены частные уровни доступа, и они не редактируются. - person merlachandra; 07.04.2012
comment
Бред, они нередактируемые. Если вы не можете понять, как использовать вашу IDE, вы должны сначала задать вопросы об этом или использовать более простой редактор кода. - person Andrew Thompson; 07.04.2012

Если ваше приложение настолько простое, что имеет только две панели, вам не следует создавать два JFrames. Вы должны создать JFrame с двумя JPanel, каждая из которых содержит необходимую вам информацию. Если вы готовы со своей первой панелью, вы можете вызвать setVisible(false) на ней и вызвать setVisible(true) на втором кадре. Это одно из самых простых для понимания решений.
Но это зависит только от вас, подходит ли оно вам или вы хотели бы использовать какое-то более подробное решение.

person dexametason    schedule 07.04.2012
comment
Для этой цели можно использовать CardLayout, его можно найти здесь docs.oracle. com/javase/tutorial/uiswing/layout/card.html - person krystan honour; 07.04.2012
comment
Вы правы, здесь может помочь раскладка карт! Но я не хотел вдаваться в подробности о макетах в своем ответе, поскольку спрашивающий не знаком с разработкой графического интерфейса Java. - person dexametason; 07.04.2012
comment
Я не хотел вдаваться в подробности о макетах... так как автор вопроса плохо знаком с разработкой графического интерфейса Java. Это лучшее время для пусть новички знают, насколько они важны для разработки графического интерфейса. Заранее избегайте вредных привычек. - person Andrew Thompson; 07.04.2012

Что вам нужно сделать, так это иметь один JFrame для приложения, а затем добавлять и удалять JPanels по мере того, как вы хотите перемещаться между экранами.

Каждая из ваших JPanels должна в основном иметь следующее... 1. JButton под названием «Далее» 2. ButtonListener для каждой кнопки, которая указывает JFrame загружать панель2, панель3 и т. д.

Как часть ButtonListener, вы просто хотите вызвать что-то вроде JFrame.removeAll(), чтобы удалить существующую панель, а затем JFrame.add(JPanel), чтобы добавить следующую панель.

Имея 1 JFrame, у вас также есть только 1 main() метод.

person wattostudios    schedule 07.04.2012
comment
Спасибо за Ваш ответ. В netbeans я выбирал Jframe внутри форм SWING GUI при создании нового файла класса (.java). Итак, я создал два jFrames. Теперь, после всех ваших ответов, я нашел возможность создать форму JPanel. Моя проблема будет решена путем изменения второго кадра на JPanel... - person merlachandra; 07.04.2012
comment
Отлично, это приятно слышать. Если на ваш вопрос дан ответ, убедитесь, что вы поставили галочку напротив правильного ответа, чтобы другим был полезен ваш вопрос/ответ. - person wattostudios; 07.04.2012
comment
затем JFrame.add(JPanel) для добавления следующей панели. Затем вызовите validate().. Это сложнее, чем кажется. Вот почему CardLayout так удобен. Все косяки сглажены. ;) - person Andrew Thompson; 07.04.2012
comment
После ответов я столкнулся с некоторыми новыми проблемами. Поскольку я не могу вставить больше текста в комментарий, я отредактировал вопрос и добавил туда свои комментарии... Может ли кто-нибудь просмотреть отредактированный вопрос и ответить на мои вопросы? - person merlachandra; 08.04.2012