Открытие другого файла .java в графическом интерфейсе - PullRequest
0 голосов
/ 03 ноября 2011

Коротко и сладко : я хотел бы иметь возможность запускать другой файл .java одним нажатием кнопки в графическом интерфейсе в Netbeans для Mac.

Еще немного объяснений : Я воссоздаю проект, который создал, когда начинал с Java, чтобы сделать его чище. Я сделал много улучшений, хотя одна проблема, с которой я столкнулся, заключалась в том, что у меня было слишком много панелей в одном JFrame, и у меня возникало большое количество видимости настройки кода при каждой смене панели.

Например:

jPanel1.setVisible(false);
jPanel2.setVisible(false);
jPanel3.setVisible(true);

Я знаю, что мог бы просто с этим смириться, но я хотел бы посмотреть, есть ли способ разделить код / ​​панели немного больше, как описано ниже. Моей первой мыслью было иметь несколько файлов; по одному на каждую страницу. Как и в HTML.

Поэтому у меня есть LoginPage.java и GuestMainPage.java. Если это возможно, я хотел бы иметь возможность связать их, например: закрыть LoginPage.java и открыть GuestMainPage.java , по нажатию кнопки.

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

Пример Если есть способ открыть другой файл. Возможно, путем доступа к командам терминала?

public class LoginPage extends javax.swing.JFrame {

//Excluded a bunch of generated code from Netbeans

private void Login(java.awt.event.MouseEvent evt) {
//Code executed on Mouse Click of a Button labeled Login.

            if(username.equalsIgnoreCase("guest")){

                  //A bit of pseudocode
                  open(GuestMainPage.java);
                  close(LoginPage.java);

            }
            if(username.equalsIgnoreCase("admin")){

                  open(AdminMainPage.java);
                  close(LoginPage.java);

            }
}
}

Из исследований и опыта я знаю, что вы можете получить доступ к другим файлам или другим классам в рамках одного и того же проекта - таким образом, использовать объекты и тому подобное - но я не знаю, можете ли вы физически запустить другой файл. Я был бы в состоянии жить с возможностью доступа к терминалу через Java. (А потом у меня есть возможность делать что угодно, я просто не могу найти, как это сделать).

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

Спасибо

-Ewan

Ответы [ 3 ]

4 голосов
/ 03 ноября 2011

Нет, вы не «открываете» другие файлы, подобные этому, и не хотите. Вместо этого вы компилируете все файлы Java в файлы классов и используете другие классы. Вы можете загружать классы по команде, используя пользовательский загрузчик классов, но я искренне сомневаюсь, что ваше приложение действительно нуждается в этом. Вместо этого ему просто нужно некоторое структурирование MVC (модель-представление-контроллер) (как отмечено ilea - 1+ для них) и продуманность.

Одним из приличных решений, которое следует рассмотреть, является использование CardLayout, поскольку это может значительно упростить изменение "представлений" GUI или компонентов, отображаемых в контейнере верхнего уровня, таком как апплет или JFrame. Вы можете прочитать о том, как использовать этих парней здесь: Как использовать CardLayout

2 голосов
/ 03 ноября 2011

Вы должны попробовать реализовать шаблон MVC.Взгляните на весну: http://www.springsource.org/

0 голосов
/ 11 июня 2017

Как я вижу, вы будете делать то же самое, что и я. Пожалуйста, начните это с малого. Предположим, у меня есть файл «.java», и я хочу запустить его с помощью кнопки JFRAME, поэтому я могу создать этот файл «.java» в файле JAR, а затем с помощью JBUTTON я могу запустить этот файл JAR с этим кодом .

try { 
    Desktop.getDesktop().open(new File("Path of the *.jar File"));     
} catch(IOException ex) {
    System.out.println(ex.getMessage());
}

Попробуйте это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...