簡體   English   中英

簡單的Java GUI程序

[英]Simple Java GUI Program

由於某些原因,我的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);

                }
            });     
        }
    });     
}

}

不要添加的JTextField和JPanel中的ActionListener 這是沒有意義的,因為每次按下按鈕時都將重新添加新組件。 而是在GUI上調用setVisible(true)之前,在GUI創建中添加它們。 然后在ActionListener中更新文本字段的文本。

作為附帶建議:嘗試通過為類提供字段,構造函數,並從靜態main方法中獲取大部分代碼,使類更加面向對象。

您的錯誤:

  1. run方法中而不是在actionPerformed向框架添加clicksfirstpanel
  2. 應該將BorderLayout.CENTER作為add方法的參數傳遞,而不是傳遞給文本字段構造函數。
  3. 將count定義為static 這不是最好的方法,但是在您的情況下,這是最簡單的方法。
  4. 調用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);
            }
        });
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM