Передать пользовательский ввод (из TextField) в другой класс? - PullRequest
0 голосов
/ 23 мая 2018

У меня следующая проблема: у меня в игре 2 класса - CONFIGUREGAME (CG) и ROULETTETABLE (RT) - и пользователь может указать детали игры, такие как его имя или его деньги, в классе CG.В классе RT я хочу, чтобы входные данные из JTextField из класса CG отображались на кнопке в классе RT.

Вот мой код (я его значительно упростил):

public class CONFIGUREGAME extends JFrame implements ActionListener
{
    Jframe frame = new JFrame("...");
    public JTextField playername1 = new JTextField();
    public JButton startgame = new JButton();

    public CONFIGUREGAME()
    {
        startgame.addActionListener(this);
    }

    public static void main(String (String[] args) 
    {
       new CONFIGUREGAME();
    }

    public void actionPerformed(ActionEvent aEvt) 
    {
        if(aEvt.getSource()==startgame)
        {
            frame.dispose();
            new ROULETTETABLE();
        }
    }

сейчас класс 2:

import ...;

public class ROULETTETABLE extends CONFIGUREGAME implements ActionListener
{
     public player1 = new JButton();

     public ROULETTETABLE()
     {
         String Strplayername1 = playername1.getText();
         player1.setText(Strplayername1);
     }

     public static void main(String (String[] args) 
     {
         new ROULETTETABLE();
     }
}

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

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Option # 1

Передать результат CONFIGUREGAME в ROULETTETABLE

public class CONFIGUREGAME extends JFrame implements ActionListener {

    //Jframe frame = new JFrame("..."); WHY?

    //...

    public void actionPerformed(ActionEvent aEvt) {
        if (aEvt.getSource() == startgame) {
            frame.dispose();
            new ROULETTETABLE(playername1.getText());
        }
    }


public class ROULETTETABLE extends JFrame /* CONFIGUREGAME why? */implements ActionListener
{
     public JButton player1 = new JButton();

     public ROULETTETABLE(String playerName)
     {
         player1.setText(playerName);
     }
}

Я не фанат этого, потому что он связывает класс CONFIGUREGAME сROULETTETABLE

Лучший вариант ...

Используйте JDialog, чтобы собрать информацию о конфигурации, а затем передать ее ROULETTETABLE классу

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

public class Roulettetable extends JPanel implements ActionListener {

    private JButton player1 = new JButton();

    public Roulettetable(String name) {
        player1.setText(name);
    }
}

public class ConfigureGame extends JPanel {

    private JTextField playername1 = new JTextField();

    public ConfigureGame() {
    }

    public String getPlayerName() {
        return playername1.getText();
    }
}

Затем вы полностью оборачиваете его ...

EventQueue.invokeLater(new Runnable() {
    @Override
    public void run() {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
            ex.printStackTrace();
        }
        ConfigureGame configureGame = new ConfigureGame();
        JOptionPane.showOptionDialog(null, configureGame, "Configure Game", JOptionPane.OK_OPTION, JOptionPane.PLAIN_MESSAGE, null, new Object[] {"Start"}, 0);
        String name = configureGame.getPlayerName();

        Roulettetable roulettetable = new Roulettetable(name);

        JFrame frame = new JFrame("Testing");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(roulettetable);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
});

Этот пример довольно прост, он просто использует JOptionPane для отображения диалога.

Посмотрите Как сделать диалоги для получения более подробной информации

0 голосов
/ 23 мая 2018

Вам нужно что-то вроде этого.

public class CONFIGUREGAME extends JFrame implements ActionListener
{
    Jframe frame = new JFrame("...");
    public JTextField playername1 = new JTextField();
    public JButton startgame = new JButton();

    public CONFIGUREGAME()
    {
        startgame.addActionListener(this);
    }

    public static void main(String (String[] args) 
    {
       new CONFIGUREGAME();
    }

    public void actionPerformed(ActionEvent aEvt) 
    {
        if(aEvt.getSource()==startgame)
        {
            frame.dispose();
            new ROULETTETABLE(playername1.getText());
        }
    }
}

public class ROULETTETABLE extends CONFIGUREGAME implements ActionListener
{
     public JButton player1 = new JButton();

     public ROULETTETABLE(String playerName)
     {
         player1.setText(playerName);
     }

     public static void main(String (String[] args) 
     {
         new ROULETTETABLE();
     }
}

PS Пожалуйста, изучите метод Java и нотацию классов.CapitalizedClassName, firstWordLowercaseMethodName, firstWordLowercaseVariableName, UPPER_CASE_CONSTANT_NAME

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