java - 如何启用按钮将变量加一并将其显示在文本字段上

标签 java swing

我有一个 JButton,分配给它的操作是空白的。 我希望每次单击变量时它都会将变量加一,并在名为“AgeOutputBox”的 JTextField 内显示该值。

我已经尝试了一个多小时了,但我似乎还是做不好。我可能又错过了一些明显的东西,但请注意,我对 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();
            }
        });
}
}

最佳答案

 public MainGUIClass() {
   ...
   private int age = 1;
   ...
   ageOutputBox.setText("" + age);
   ...
   ageButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent arg0) {
           ageOutputBox.setText("" + (++age) ); 
      }

   });

 }

此外,ageOutputBox 应设为不可编辑,否则添加监听器以在用户编辑内容时修改年龄变量。

关于java - 如何启用按钮将变量加一并将其显示在文本字段上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54895703/

相关文章:

java - 我有一个 boolean 变量来暂时禁用我的鼠标监听器,但它会记住我单击的位置

javascript - 数据表 - rows().data().each() 函数不起作用

java - 如何从图表创建最快的图像

java - JButton 图像渲染很糟糕

JFrame/JFXPanel 中的 Java-FX 菜单栏 : First click not recognized

java - 在Java Swing中获取选定值JList或List,卡在ListModel的getElementAt()中

java - Java 中最好的 "closable TabbedPane"组件是什么?

java - 客户端服务器端通信java

java - 找不到 hibernate 的 cfg.xml

java - 程序跳过 'if' 语句并默认为 'else'