简单javagui程序

简单javagui程序,java,swing,Java,Swing,我的JPanel和JTextField由于某种原因没有出现。程序唯一的任务是每次单击按钮时向计数器添加一个数字。没有编译错误或控制台问题。根本就没有出现 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Swing { public static void main(String[] args) { SwingUtilities.invokeLater(new Runnab

我的JPanel和JTextField由于某种原因没有出现。程序唯一的任务是每次单击按钮时向计数器添加一个数字。没有编译错误或控制台问题。根本就没有出现

import java.awt.*;
import java.awt.event.*;
import javax.swing.*; 

public class Swing  
{
public static void main(String[] args) 
{
   SwingUtilities.invokeLater(new Runnable()
    {
        public void run() 
        {
            final JFrame mainFrame = new JFrame ("Counter (Program 1/2)"); 
            mainFrame.setVisible(true);
            mainFrame.setSize(400, 200);
            mainFrame.setLayout(new BorderLayout());
            mainFrame.setLocationRelativeTo(null); 
            mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 


            JButton countButton = new JButton("Count up");
            mainFrame.add(countButton, BorderLayout.SOUTH);

            countButton.addActionListener(new ActionListener()
            {
                @Override
                public void actionPerformed(ActionEvent e)
                {
                    JTextField clicks = new JTextField(BorderLayout.CENTER);
                    JPanel firstPanel = new JPanel();
                    mainFrame.add(firstPanel);
                    mainFrame.add(clicks, BorderLayout.NORTH);      
                    int counter = 1;
                    counter++;
                    String textField = String.valueOf(counter);
                    clicks.setText(textField);

                }
            });     
        }
    });     
}

}不要在ActionListener中添加JTextField和JPanel。这毫无意义,因为每次按下按钮时都会重新添加新组件。而是在GUI上调用
setVisible(true)
之前,在GUI创建时添加它们。然后在ActionListener中更新文本字段的文本


附带建议:通过给类指定字段、构造函数,并从静态main方法中获取大部分代码,尝试使类更面向对象。

不要在ActionListener中添加JTextField和JPanel。这毫无意义,因为每次按下按钮时都会重新添加新组件。而是在GUI上调用
setVisible(true)
之前,在GUI创建时添加它们。然后在ActionListener中更新文本字段的文本

作为附带建议:通过给类指定字段、构造函数,并从静态main方法中获取大部分代码,尝试使类更面向对象。

您的错误:

  • 单击
    firstpanel
    添加到
    run
    方法中的框架中,而不是在
    actionPerformed
  • BorderLayout.CENTER应作为参数传递给
    add
    方法,而不是文本字段构造函数
  • 将计数定义为静态。这不是最好的方法,但在你的情况下,这是最简单的方法
  • 调用mainFrame.setVisible(true)添加所有组件后
  • 以下是工作代码:

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class Swing {
    
        public static int counter = 1;
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    final JFrame mainFrame = new JFrame("Counter (Program 1/2)");
    
                    mainFrame.setSize(400, 200);
                    mainFrame.setLayout(new BorderLayout());
                    mainFrame.setLocationRelativeTo(null);
                    mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
                    JButton countButton = new JButton("Count up");
                    mainFrame.add(countButton, BorderLayout.SOUTH);
    
                    final JTextField clicks = new JTextField(String.valueOf(counter));
                    JPanel firstPanel = new JPanel();
                    mainFrame.add(firstPanel, BorderLayout.CENTER);
                    mainFrame.add(clicks, BorderLayout.NORTH);
    
                    countButton.addActionListener(new ActionListener() {
                        @Override
                        public void actionPerformed(ActionEvent e) {
    
                            counter++;
                            String textField = String.valueOf(counter);
                            clicks.setText(textField);
    
                        }
                    });
    
                    mainFrame.setVisible(true);
                }
            });
        }
    }
    
    你的错误:

  • 单击
    firstpanel
    添加到
    run
    方法中的框架中,而不是在
    actionPerformed
  • BorderLayout.CENTER应作为参数传递给
    add
    方法,而不是文本字段构造函数
  • 将计数定义为静态。这不是最好的方法,但在你的情况下,这是最简单的方法
  • 调用mainFrame.setVisible(true)添加所有组件后
  • 以下是工作代码:

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class Swing {
    
        public static int counter = 1;
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    final JFrame mainFrame = new JFrame("Counter (Program 1/2)");
    
                    mainFrame.setSize(400, 200);
                    mainFrame.setLayout(new BorderLayout());
                    mainFrame.setLocationRelativeTo(null);
                    mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
                    JButton countButton = new JButton("Count up");
                    mainFrame.add(countButton, BorderLayout.SOUTH);
    
                    final JTextField clicks = new JTextField(String.valueOf(counter));
                    JPanel firstPanel = new JPanel();
                    mainFrame.add(firstPanel, BorderLayout.CENTER);
                    mainFrame.add(clicks, BorderLayout.NORTH);
    
                    countButton.addActionListener(new ActionListener() {
                        @Override
                        public void actionPerformed(ActionEvent e) {
    
                            counter++;
                            String textField = String.valueOf(counter);
                            clicks.setText(textField);
    
                        }
                    });
    
                    mainFrame.setVisible(true);
                }
            });
        }
    }
    

    非常感谢你!有没有办法将计数器对准JTextField的中心?
    单击.setHorizontalAlignment(JTextField.center)这就可以了。非常感谢!有没有办法将计数器对准JTextField的中心?
    单击.setHorizontalAlignment(JTextField.center)这将完成任务。