我的小部件未显示在 java (swing) 中

问题描述

我是 Java 新手,我有一个错误,我已经尝试修复了几个小时。

我有以下代码

package MatchMe;

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;

public class InterfazMatchMe extends JFrame{
    private ControllerMatchMe controller;
    private Boolean pressButton = false;
    private int SIZE_SQUARES_ARRAY = 8;
    private JPanel squaresArea;
    private Listener listener;
    private ImageIcon image;
    private JLabel square;
    private JButton match;
    private Timer timer;
    // Son importantes para que la clase 'Listener' sepa de estas
    private GridBagConstraints constraints;
    private Squares focusSquares[];
    private int dificult;
    private int id;
    
    InterfazMatchMe() {
        initGUI();
        this.setTitle("Match Me");
        this.setSize(800,700); //800,650
        this.setLocationRelativeto(null);
        this.setResizable(false);
        this.setVisible(true);
        this.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
    }
    
    public void initGUI() {
        this.getContentPane().setLayout(new GridBagLayout());
        constraints = new GridBagConstraints();
        
        listener = new Listener();
        controller = new ControllerMatchMe();
        squaresArea = new JPanel();
        generateButton();
        timer = new Timer(2000,listener);
        timer.start();
    }
    
    public void generateButton() {
        match = new JButton("MATCH");
        match.addActionListener(listener);
        constraints.gridx = 1;
        constraints.gridy = 3;
        constraints.gridwidth  = 1;
        constraints.gridheight = 1;
        constraints.fill = GridBagConstraints.NONE;
        add(match,constraints);
    }
    
    // this method does not work well
    public void game() {
        while(true) {
            this.dificult = controller.getDificult();
            Squares squares[] = controller.getSquares();
            Squares shuffleSquares[] = controller.shuffleArray(squares);
            Squares filteredSquares[] = controller.extractSpecificLength(shuffleSquares,dificult);
            while(true)
            {
                this.id = controller.changeElement(shuffleSquares,filteredSquares,dificult);
                this.focusSquares = controller.setFocus(id,true);
                while(true) {
                    System.out.println(1);
                    generateSquaresArray(focusSquares,dificult,constraints);
                    break;
                }
                controller.setFocus(id,focusSquares,false);
                System.out.println(3);
                if(controller.getAciertos() % 3 == 0 && controller.getPermissionsChangeDificult()) {
                    controller.setPermissionsChangeDificult(false);
                    controller.setDificult(dificult+1);
                    break;
                }
                else if(controller.getmatch()) {
                    break;
                }
            }
        }
    }
    
    private void generateSquaresArray(Squares[] focusSquares,int dificult,GridBagConstraints constraints) {
        int x=0,y=0;
        
        for(int i=0; i<dificult; i++) {
            image = new ImageIcon("src/Images/"+focusSquares[i].getId()+".jpg");
            square = new JLabel(image);
            constraints.gridx = x;
            constraints.gridy = y;
            constraints.gridwidth  = 1;
            constraints.gridheight = 1;
            constraints.fill = GridBagConstraints.NONE;
            if(x == 3) {x = 0;y = 1;} else {x += 1;}
            squaresArea.add(square,constraints);
        }
        squaresArea.setPreferredSize(new Dimension(310,180));
        constraints.gridx = 1;
        constraints.gridy = 1;
        constraints.gridwidth  = 2;
        constraints.gridheight = 2;
        constraints.fill = GridBagConstraints.NONE;
        add(squaresArea,constraints);
    }
    
    public void userInteraction(String answer) {
        controller.updateStatusGame(answer,id);
            
        if(controller.getGoodGame()) {
            System.out.println("\nBien hecho,has sumado 5 puntos\n");
        }
        else {
            System.out.println("\nMuy mal,tienes una vida menos\n");
            if(controller.getPlayerLives() == 0) {
                System.out.println("Game over !!!\n");
                System.out.print(controller.getStatisticsPlayer());
                System.exit(0);
            }
        }
    }
    
    private class Listener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent event) {
            System.out.println(2);
            if(event.getSource() == match) {
                pressButton = true;
                userInteraction("y");
                pressButton = false;
            }
            if(pressButton == false ) {
                userInteraction("n");
            }
        }
    }
}

代码中,有一个方法有这样的注释:this method does 效果不好

问题如下。您看到的那些 System.out.print 正在重复,就像它们从未退出循环一样。

另一方面,未显示小部件。通过小部件了解在名为“squaresArea”和“匹配按钮”的 JPanel 中生成的“方块”。

如果我评论“game()”函数,也就是有这个错误函数,程序运行没有任何问题。

我请求你的帮助,我已经尝试了一切。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)