2014-10-08 6 views
0

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

Прежде всего, моя цель состоит в том, чтобы создать симпатичного клиента, который будет иметь экран входа в систему (login/pw), а затем красивый макет с моими параметрами/возможно, окно чата после входа пользователя в систему.

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

На данный момент я создал класс ClientGUI, который вызывается из моего основного класса, и это создает экран размера 420x240. После размещения моих логов/паролей JTextField здесь, правильно ли настроить другой графический интерфейс, как я изложил ниже? Я не уверен, должен ли я помещать их под один класс или как я продвигаюсь от одного графического интерфейса к другому. Я думаю, что я должен перекрасить и изменить размер экрана по мере необходимости, но я не уверен, как все это сделать. Краткое описание было бы полезно (вам не нужно указывать точный код).

public class ClientGUI extends JFrame { 

    public ClientGUI() { 
     setSize(420,240); 
     setVisible(true); 
     setTitle("Title"); 
     setResizable(true); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLayout(null); 
    } 

    public loginGUI() { 
     //code for my login/pw boxes, images, listener for entering information 
    } 

    public afterlogginginGUI() { 
    } 

    paint() { 
    //not too sure about how this should be setup either. Should I do all my textfield 
    //and image work in paint()? 
    } 

    } 

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

Альтернатива заключается в том, чтобы иметь отдельный класс java, расширяющий JFrame для каждого «экрана», который я хочу, но если я сделаю это так, сделаю ли я это так?

В моем главном классе RemoteClient:

main { 
    ClientGUI(); 
    //display whatever 
    LoginGUI(); 
    //listen for login info 
    if (loginIsValid) { 
     afterlogginginGUI(); 
    } 
} 

ответ

1

Я думаю, что вы думаете, чтобы большая часть линейной моды, где код течет от А затем B затем C ... где на самом деле, Свинг (и графический интерфейс в целом) являются событиями ...

C происходит, так что вы B, которая вызывает F так что вы E ...

Начните с созданием JPanel, на это добавить JTextField и JPasswordField, это будет действовать как основной журнал ввиду. Затем вы можете добавить это в JFrame или JDialog в зависимости от ваших потребностей. Вам потребуется какой-то способ для пользователя либо «отменить», либо «проверить» свои учетные данные.

Как правило, я делаю это отдельным видом, так как я никогда не знаю, где может оказаться моя бедная панель «Сведения о пользователе», но вы можете сделать это один вид (включая кнопки в панели «Сведения пользователя») что будет соответствовать вашим требованиям.

Вы можете использовать CardLayout, чтобы перейти от «входа» в режим «приложение». Это имеет преимущество сохранения только одного кадра и предотвращает разбрызгивание окон вокруг места ...

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

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

Начните с просмотра Creating a GUI With JFC/Swing.

Вы, вероятно, также будет интересно How to Use CardLayout, How to Make Dialogs, How to Use Buttons, Check Boxes, and Radio Buttons и How to Write an Action Listeners

Вы также должны взглянуть на Laying Out Components Within a Container

Потому что вы, вероятно, ждет ответа от сервера в какой-то момент вам нужно будет взглянуть на Concurrency in Swing и Worker Threads and SwingWorker не повредит

+0

У меня есть общее представление о том, как я буду проверять регистрационную информацию (я установил свой сервер для клиента writin г/чтение), поэтому я знаю, как я буду запускать определенные события. Когда вы говорите, чтобы отделить функциональность ядра от отдельных классов, вы имеете в виду разделение всего (например, 1 класс для входа в систему, 1 класс для всех, что приходит после этого, и т. Д.) Или разделять только функции (например, проверку, но не макет)? Я предполагаю, что вы имеете в виду разделить все. Я прочитаю эти ссылки. – Rahul

+0

* «Я предполагаю, что вы имеете в виду раздельное все» * - Да, вообще, это лучший подход. Это предпосылка парадигмы [Model-view-controller] (http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller). В принципе, ваш пользовательский интерфейс (просмотр) будет собирать данные от пользователя, когда нажмите кнопку «Войти», кнопка «ActionListener» кнопки попросит контроллер выполнить проверку. Это означает, что вы можете изменить способ работы валидации без изменения вида в качестве базового примера. Если вам интересно, модель может содержать учетные данные – MadProgrammer

+0

Я разрабатываю свой графический интерфейс для своего экрана входа прямо сейчас с помощью JFrame. Есть ли конкретная причина, почему вы сказали использовать JPanel, а не JFrame? Кроме того, при создании второго экрана я мог бы просто создать другой JFrame и создать его отдельно в своем собственном классе, а затем выйти из окна входа в систему и создать экземпляр нового класса? Я знаю, что вы предложили использовать CardLayout, и я могу это сделать, но я посмотрел пример онлайн, и мне интересно, если это лучший способ перехода к следующему представлению. – Rahul