Java GUI, переход от одного класса к другому - PullRequest
0 голосов
/ 28 января 2019

Я в тупике и отчаянно нуждаюсь в помощи.Я был в состоянии понять все остальное, пока я не попал в GUI.Я пытаюсь перейти от LogInPane (Страница входа в систему) к JobSelectionGUI (Страница выбора работы);

Когда я компилирую, он работает так, как я хочу, но я не могу понять, как заставить мой JFrame из LogInPaneGUI закрываться при открытии JobSelectionGUI, Тонны чтения и видео иВыбор GUI / Применение их является грубым!Я начал с GridLayout, затем переключился на GridBagLAyout, затем попытался CardLayout и теперь вернулся к GBL.

Я не использую IDE;Я использую SublimeText, поэтому, если в моем коде что-то выглядит чрезвычайно вытянутым, то это потому, что мне пришлось долго писать его для Sublime (или потому что я плохой).Весь мой код разделен на разные классы, поэтому он остается аккуратным и простым в отладке.Каждый класс имеет свой собственный пакет, и каждый пакет имеет не более 2 методов.Я работаю над своей задницей, чтобы держать мой основной полностью пустым!

Принимая всю критику и советы!

ГЛАВНАЯ:

package com.hallquist.kurtis.leigh.srcmain;

    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    import javax.swing.text.*;

    // Class imports;
    import JobSelection.*;
    import LogInPane.*;

    // My Main function. Used to pull packages and methods and compile them here;
    public class SrcMainUserInformation{
      public static void main(String[] args){

        LogInPaneGUI logInGUI = new LogInPaneGUI();
        logInGUI.logInPaneMainGUI();
      }
    }

Первый класс:

    package LogInPane; // package name;

    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    import javax.swing.ImageIcon;

    import JobSelection.*; //import for next GUI when LogInButton is clicked;

    public class LogInPaneGUI{

      private static final JFrame frame = new JFrame();
      private static final int COLS = 10; // Max columns;
      private static final JPanel panelForm = new JPanel(new GridBagLayout()); // layout
      private static final JTextField fieldLogInName = new JTextField(COLS); //login
      private static  final JPasswordField logInPassword = new JPasswordField(COLS); //pw
      private static final JButton logInButton = new JButton("Log In"); //login button
      private static final JButton exitButton = new JButton("EXIT"); //system.exit button
      private static final JButton newUser = new JButton("New User? Click here to sign up!"); // new user button
    // Wigits on login page;
      public LogInPaneGUI(){

      GridBagConstraints c = new GridBagConstraints();
    // Creates the panel that goes ontop of the JFrame;
        c.gridx = 0;
        c.gridy = 0;
        c.anchor = GridBagConstraints.LINE_END;
          panelForm.add(new JLabel("Account Name: "), c);
            c.gridy ++;
          panelForm.add(new JLabel("Password: "), c);
        c.gridy ++;
        c.gridx = 1;
        c.gridy = 0;
          c.anchor = GridBagConstraints.LINE_START;
            panelForm.add(fieldLogInName, c);
        c.gridy++;
            panelForm.add(logInPassword, c);
        c.gridy++;
            panelForm.add(logInButton, c);
        c.gridy++;
            panelForm.add(newUser, c);
        c.gridy++;
            panelForm.add(exitButton, c);
    // Goes to fourm/website on newUser click;
      newUser.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e){
          System.out.println("Fourm/Website to sign up for game");
        }
      });
    // Exits program on exitButton click;
      exitButton.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e){
          System.exit(0);
        }
      });
    // Goes to JobSelectionGUI on logInButton Click;
      logInButton.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e){
        JobSelectionGUI jobSelecting = new JobSelectionGUI();
        jobSelecting.jobSelectionJFrameGUI();
    //    frame.dispose();
    //      System.out.println("Will log you in when I set it up");
        }
      });
    }
    // Actual JFrame that everything goes ontop of;
      public static void logInPaneMainGUI(){

        JFrame frame = new JFrame("FirstProject");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setSize(1080, 720);
        frame.setResizable(false);
        frame.setVisible(true);
        frame.setLocationRelativeTo(null);
        frame.getContentPane().add(panelForm);
      }
    }

Второй класс:

    package JobSelection;

    import java.awt.*;
    import java.awt.event.ActionEvent.*;
    import javax.swing.*;
    import javax.swing.text.*;
    // Mass import from JobSelection package; All base job information;
    import JobSelection.JobInformationIndex.JobAmazonData.*;
    import JobSelection.JobInformationIndex.JobBanditData.*;
    import JobSelection.JobInformationIndex.JobLancerData.*;
    import JobSelection.JobInformationIndex.JobSorcererData.*;
    import JobSelection.JobInformationIndex.JobWitchData.*;
    import LogInPane.*; // to return to login screen;
    import JobSelection.*; // dont know if needed;

    public class JobSelectionGUI{

      private static JFrame frame = new JFrame();
      private static JSplitPane jSplitPane = new JSplitPane();
      private static JPanel leftPane = new JPanel();
      private static JLabel logInCharacterName = new JLabel();
      private static JTextField userCharacterName = new JTextField();
      private static JButton logInAccept = new JButton("Accept");
      private static JButton logInBack = new JButton("Back");
      private static JTextArea firstGameIntroduction = new JTextArea();
      private static JTextArea descriptionIntroduction = new JTextArea();
      private static JTextArea jobSelectedInformation = new JTextArea();
      private static JPanel allWidgits = new JPanel();

      public JobSelectionGUI(){

      JTextArea firstGameIntroduction = new JTextArea("\ Text.");
        firstGameIntroduction.setLineWrap(true);
        firstGameIntroduction.setWrapStyleWord(true);
        JScrollPane areaScrollPane = new JScrollPane(firstGameIntroduction);
        areaScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        areaScrollPane.setPreferredSize(new Dimension(250, 250));
        areaScrollPane.setBorder(
          BorderFactory.createCompoundBorder(
            BorderFactory.createCompoundBorder(
            BorderFactory.createTitledBorder("Introduction"),
            BorderFactory.createEmptyBorder(5,5,5,5)),
          areaScrollPane.getBorder()));

        leftPane.add(areaScrollPane);

      JTextArea descriptionIntroduction = new JTextArea(" Text.\n");
        descriptionIntroduction.setLineWrap(true);
        descriptionIntroduction.setWrapStyleWord(true);
        JScrollPane areaScrollPaneTwo = new JScrollPane(descriptionIntroduction);
        areaScrollPaneTwo.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        areaScrollPaneTwo.setPreferredSize(new Dimension(250, 250));
        areaScrollPaneTwo.setBorder(
          BorderFactory.createCompoundBorder(
            BorderFactory.createCompoundBorder(
            BorderFactory.createTitledBorder("What to expect"),
            BorderFactory.createEmptyBorder(5,5,5,5)),
          areaScrollPaneTwo.getBorder()));

        leftPane.add(areaScrollPaneTwo);
    }

      public static void jobSelectionJFrameGUI(){

        JFrame frame = new JFrame("FirstProject");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(1080, 720);
        frame.setResizable(false);
        frame.setVisible(true);
        frame.setLocationRelativeTo(null);
        frame.getContentPane().add(leftPane);
      }
    }

1 Ответ

0 голосов
/ 28 января 2019
  1. Вы чрезмерно злоупотребляете статическим модификатором, и большинство ваших полей должны не на самом деле быть статическими.Я бы рискнул заявить, что большинство, если не все поля вашего класса должны быть частными экземпляром полей.
  2. Окно входа в систему должно не быть JFrame, а скорееблокирующий или «модальный» диалог, а для Swing это означает использование модального JDialog или JOptionPane (который создает модальный JDialog за кулисами)
  3. Модальное диалоговое окно будет блокировать вызывающий код при отображении
  4. И если диалоговое окно является модальным, то вы знаете, когда оно больше не отображается, поскольку вызывающий код разблокирован.Это когда вы запрашиваете состояние полей диалога (используя общедоступные методы получения, не вызывая статические поля напрямую) и решаете, был ли вход успешным или нет.Если это так, покажите свое главное окно графического интерфейса или JFrame.
  5. Другой вариант - да, используйте CardLayout, но для этого все основные классы GUI должны быть направлены на создание JPanels, а не JFrames.Таким образом, вы можете вставлять панели там и тогда, когда это необходимо, в том числе в окнах верхнего уровня, таких как JFrames или JDialogs, в пределах или JPanels, или менять местами с помощью CardLayout.
  6. Обратите внимание, что frame.dispose() не работает длявы, потому что вы тень поле кадра с помощью повторного объявления это logInPaneMainGUI() метод.

public static void logInPaneMainGUI() {
    // ***** this creates a new local JFrame variable called frame
    JFrame frame = new JFrame("FirstProject");       
    // so calling frame.dispose() elsewhere will have no effect on this window

Не делайте этого, и вызов метода .dispose() закроет первое окно.

public static void logInPaneMainGUI() {
    frame = new JFrame("FirstProject"); // this initializes the frame field
    // so calling frame.dispose() elsewhere will have no effect on this window

Конечно, кадр должен быть не окончательным или не инициализированным ранее.Тем не менее, я бы по-прежнему рекомендовал использовать JDialog, а также переместить из из статического мира в мир экземпляров

Несвязанная критика:

Меньше болтливого текста в вашем вопросе, текста, который совершенно не связан с вашей актуальной проблемой, и больше текста, который сообщает нам полезную информацию, которая помогает нам понять вашу проблему и ваш код, и тем самым помогает нам решитьпроблема.

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