Как включить кнопку для увеличения переменной на единицу и отображения ее в textField? - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть JButton, которому назначено действие, которое является пустым.Я хочу, чтобы она увеличивала переменную на единицу каждый раз, когда я щелкаю по ней, и отображала это значение внутри JTextField с именем «AgeOutputBox».

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

Вот код

package mainPackage;

import java.awt.Button;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;



public class MainGUIClass extends JFrame {
    public MainGUIClass() {
    }
    //Default auto-generated variables
    private static final long serialVersionUID = 8360937123719531815L;
    private static JTextField AgeStringBox;
    private static JTextField AgeOutputBox;
    //End of default auto-generated variables

    public static void mainGUIClassMethod() {//In order to see this in Window builder, change name to mainGUIClass()
        //My variables area


        //End of variable area

        JFrame frame = new JFrame();
        frame.setTitle("Text Based Game");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        JLayeredPane layeredPane = new JLayeredPane();
        layeredPane.setBounds(0, 0, 434, 261);
        frame.getContentPane().add(layeredPane);
        layeredPane.setLayout(null);

        JTabbedPane MenuBar = new JTabbedPane(JTabbedPane.TOP);
        MenuBar.setBounds(0, 0, 139, 19);
        layeredPane.add(MenuBar);

        JMenuBar JobsTab = new JMenuBar();
        MenuBar.addTab("Jobs", null, JobsTab, null);

        JPanel JobsPanel = new JPanel();
        JobsTab.add(JobsPanel);

        JMenuBar ShopTab = new JMenuBar();
        MenuBar.addTab("Shop", null, ShopTab, null);
        MenuBar.setEnabledAt(1, true);

        JPanel ShopPanel = new JPanel();
        ShopTab.add(ShopPanel);
        ShopPanel.setLayout(null);

        JMenuBar StatsTab = new JMenuBar();
        MenuBar.addTab("Stats", null, StatsTab, null);

        JPanel StatsPanel = new JPanel();
        StatsTab.add(StatsPanel);
        StatsPanel.setLayout(null);

        JPanel MainGamePanel = new JPanel();
        MainGamePanel.setBounds(0, 0, 434, 261);
        layeredPane.add(MainGamePanel);

/*I need the button below to increment a variable by 1 each time,
*and display it on the AgeOutputBox. In order to see it in Window
*Builder, rename MainGUIClassMethod() to MainGUIClass(), and comment
*out, or remove the main method at the bottom. This will make it easier
*to see what you are looking at.
*/

/*-->*/ Button AgeButton = new Button("Age");
        AgeButton.setBounds(0, 218, 434, 43);
        AgeButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            //Assign action to AgeButton here

            }

        });
        MainGamePanel.setLayout(null);
        MainGamePanel.add(AgeButton);

        JScrollPane OutputScrollPane = new JScrollPane();
        OutputScrollPane.setBounds(0, 21, 434, 197);
        OutputScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        MainGamePanel.add(OutputScrollPane);

        JTextArea TextOutputArea = new JTextArea();
        OutputScrollPane.setViewportView(TextOutputArea);
        TextOutputArea.setEditable(false);
        TextOutputArea.setForeground(Color.WHITE);
        TextOutputArea.setBackground(Color.GRAY);
        TextOutputArea.setFont(new Font("Calibri", Font.PLAIN, 15));

        AgeStringBox = new JTextField();
        AgeStringBox.setBounds(348, 0, 37, 20);
        AgeStringBox.setEditable(false);
        AgeStringBox.setText("Age:");
        MainGamePanel.add(AgeStringBox);
        AgeStringBox.setColumns(10);

        AgeOutputBox = new JTextField();
        AgeOutputBox.setBounds(382, 0, 52, 20);
        AgeOutputBox.setEditable(false);
        AgeOutputBox.setColumns(10);
        AgeOutputBox.setText("" + 1);
        MainGamePanel.add(AgeOutputBox);            

        frame.setVisible(true);

    }


    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                mainGUIClassMethod();
            }
        });
}
}

1 Ответ

0 голосов
/ 27 февраля 2019
 public MainGUIClass() {
   ...
   private int age = 1;
   ...
   ageOutputBox.setText("" + age);
   ...
   ageButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent arg0) {
           ageOutputBox.setText("" + (++age) ); 
      }

   });

 }

Кроме того, ageOutputBox следует сделать недоступным для редактирования, либо добавить прослушиватели для изменения переменной age, если пользователь редактирует содержимое.

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