Good time of day! You are worried about a novice java encoder I have a task to pass to the session. It is necessary to write a program tag. In addition to the basic functionality, the program must implement the possibility of user statistics on the time that a person played. I found the program of the Fifths ready, well, and slightly transformed. The catch in creating a stopwatch. I understand that the data from it must be displayed in the JLabel. The stopwatch itself found on this site. But when trying to output it to JLabel, it gives an error:
pt.java:155: cannot resolve symbol symbol: variable topLabel location: class pt topLabel.setText(minute + ":" + seconds);
The program code itself is further (please do not pay attention to excessive comments).
import javax.swing.*; import javax.swing.Timer; import javax.swing.border.Border; import java.awt.*; import java.awt.event.*; import java.awt.color.*; import java.util.*; public class pt extends JFrame { // ΠΊΠ»Π°ΡΡ pt Π½Π°Π·ΡΠ²Π°ΡΡ ΠΏΡΡΠΌΡΠΌ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΎΠΌ ΠΊΠ»Π°ΡΡΠ° JFrame /*ΠΡΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² Π½ΡΠΆΠ½Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ-ΠΊΠΎΠ½ΡΠ΅ΡΠΉΠ½Π΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. Π Swing ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ°ΠΊΠΈΡ
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ JPanel. ΠΠ»Π°ΡΡ GridLayout ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅ Π² Π²ΠΈΠ΄Π΅ ΡΠ°Π±Π»ΠΈΡΡ. Π ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠ΅ ΡΠ°Π±Π»ΠΈΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ. ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠΎΠΊ ΠΈ ΡΡΠΎΠ»Π±ΡΠΎΠ² ΡΠ°Π±Π»ΠΈΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΈΠ»ΠΈ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅, ΠΈΠ»ΠΈ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² setColumns ΠΈ setRows.*/ private JPanel panel = new JPanel(new GridLayout(4, 4, 2, 2)); /*ΠΠ»Π°Π²Π½ΠΎΠ΅ ΠΌΠ΅Π½Ρ JMenuBar - ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Java Swing*/ private JMenuBar menu = null; private final String fileItems[] = new String [] {"New", "Statistic", "Exit"}; private static Random generator = new Random(); // Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ
ΡΠΈΡΠ΅Π» private int[][] numbers = new int[4][4]; /* -=== ΠΠΏΡΠ΅Π΄ΠΈΠ»Π΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΡΠΈΡΠΈΠ½Ρ Π΅ΠΊΡΠ°Π½Π° ===- */ //ΠΎΠΏΡΠ΅Π΄ΠΈΠ»Π΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² Π΅ΠΊΡΠ°Π½Π° //ΠΠ»Π°ΡΡ Toolkit ΡΠ²Π»ΡΠ΅ΡΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΌ ΡΡΠΏΠ΅ΡΠΊΠ»Π°ΡΡΠΎΠΌ Π΄Π»Ρ Π²ΡΠ΅Ρ
ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ AWT. //ΠΠΎΡΠΎΠΆΠ΄Π΅Π½Π½ΡΠ΅ ΠΎΡ Π½Π΅Π³ΠΎ ΠΊΠ»Π°ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ
ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ. /*Toolkit kit = Toolkit.getDefaultToolkit(); //ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ Π½Π° Toolkit Dimension screenSize = kit.getScreenSize(); // ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΅ΠΊΡΠ°Π½Π° Π² ΠΏΠΈΠΊΡΠ΅Π»ΡΡ
int screenHeight = screenSize.height; // ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π²ΡΡΠΎΡΡ int screenWidth = screenSize.width; // ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΈΡΠΈΠ½Ρ*/ /* -=== /ΠΠΏΡΠ΅Π΄ΠΈΠ»Π΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΡΠΈΡΠΈΠ½Ρ Π΅ΠΊΡΠ°Π½Π° ===- */ public pt() { setTitle("ΠΡΡΠ½Π°ΡΠΊΠΈ"); //ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΠΊΠ½Π° /* -=== 2 - ΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Π·Π°Π΄Π°Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΠΊΠ½Π° ===- */ // ΠΠ΅ΡΠ²ΡΠ΅ 2-Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° setBonds ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π΅ΠΊΡΠ°Π½Π΅ ΠΏΠΎ x ΠΈ y; // ΠΡΠΎΡΡΠ΅ 2-Π° ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΡΠΈΡΠΈΠ½Ρ ΠΈ Π²ΡΡΠΎΡΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° // setBounds(200, 200, 300, 300); /* -=== /2 - ΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Π·Π°Π΄Π°Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΠΊΠ½Π° ===- */ setSize (300, 300); // ΠΠ°Π΄Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΎΠΊΠ½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ setLocationRelativeTo(null); // ΠΠΊΠ½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ΅Π½ΡΡΠΈΡΡΠ΅ΡΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΡΠ°Π½Π° setResizable(true); // Π·Π°Π΄Π°Π΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°ΡΡΡΠ³ΠΈΠ²Π°ΡΡ ΠΎΠΊΠ½ΠΎ createMenu(); //ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΌΠ΅Π½Ρ setJMenuBar(menu); // Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΏΠ°Π½Π΅Π»Ρ ΠΌΠ΅Π½Ρ ΠΊ ΠΎΠΊΠ½Ρ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Π·Π°ΠΊΡΡΠ²Π°Π΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΈ Π·Π°ΠΊΡΡΡΠΈΠΈ ΠΎΠΊΠ½Π° //ΠΠ»Π°ΡΡ container β ΠΏΡΡΠΌΠΎΠΉ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡ ΠΊΠ»Π°ΡΡΠ° component, ΠΈ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΡΠ΅ Π΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Ρ. //ΠΠ°ΠΆΠ΄ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ Π½Π° ΡΠΊΡΠ°Π½ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ (container). ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ "Π·Π½Π°Π΅Ρ", ΠΊΠ°ΠΊ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅. /*Π‘ΠΎΠ·Π΄Π°Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ β ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° Component ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, ΡΠ»Π΅Π΄ΡΠ΅Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΅Π³ΠΎ ΠΊ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΊΠ»Π°ΡΡΠ° container ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² add (). */ Container container = getContentPane(); init(); panel.setDoubleBuffered(true); panel.setBackground(Color.white); // ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠ²Π΅Ρ ΡΠΎΠ½Π° container.add(panel); // Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ repaintField(); JLabel(); Timer(); } public void init() { // ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° init int[] invariants = new int[16]; // ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΌΠ°ΡΡΠΈΠ² Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ invariants ΠΈΠ· 16 Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΎΠ² - Π»Ρ 0 Π΄ΠΎ 15 for (int i = 0; i < 4; i++) { // ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅ΠΌ Π΅Π»Π΅ΠΌΠ΅Π½ΡΡ i ΠΎΡ 0 Π΄ΠΎ 3 for (int j = 0; j < 4; j++) { // ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅ΠΌ Π΅Π»Π΅ΠΌΠ΅Π½ΡΡ j ΠΎΡ 0 Π΄ΠΎ 3 numbers[i][j] = 0; // ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π±ΠΎΡ Π² ΡΡΠΊΠ»Π΅ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡΡ Ρ Π½ΡΠ»Π΅Π²ΠΎΠ³ΠΎ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠ° invariants[i*4 + j] = 0; // ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· 16 Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π±ΡΠ΄Π΅Ρ = 0 } } for (int i = 1; i < 16; i++) { // ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅ΠΌ Π΅Π»Π΅ΠΌΠ΅Π½ΡΡ i ΠΎΡ 1 Π΄ΠΎ 15 int k; //ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ k ΡΠΈΠΏΠ° int int l; //ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ l ΡΠΈΠΏΠ° int do { // ΡΡΠΊΠ» Ρ ΠΏΠΎΡΠ»Π΅ΡΡΠ»ΠΎΠ²ΠΈΠ΅ΠΌ k = generator.nextInt(100) % 4; // ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ k ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΎΡ 0 Π΄ΠΎ 100 Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Π½Π° 4 l = generator.nextInt(100) % 4; // ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ l ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΎΡ 0 Π΄ΠΎ 100 Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Π½Π° 4 } while (numbers[k][l] != 0); // Π΄ΠΎ ΡΠ΅Ρ
ΠΏΠΎΡ ΠΏΠΎΠΊΠ° Π΄Π²ΡΠΌΠ΅ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² numbers Π½Π΅ ΡΠ°Π²Π΅Π½ 0 numbers[k][l] = i; // ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ Π΄Π²ΡΠΌΠ΅ΡΠ½ΠΎΠΌΡ ΠΌΠ°ΡΡΠΈΠ²Ρ numbers Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ i Π² ΡΠΈΠΊΠ»Π΅ ΠΎΡ 1 Π΄ΠΎ 15 invariants[k*4+l] = i; // ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Π²ΡΠ΅Ρ
Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΊΡΠΎΠΌΠ΅ 0 Π½Π° ΡΠ΅ΡΠΊΠ΅ } boolean change = true; // Π² Π±ΡΠ»Π΅Π²ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ change Π·Π°Π½ΠΎΡΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true int counter = 1; // ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ counter ΡΠΈΠΏΠ° int ΠΈ ΠΏΡΠΈΡΠ²Π°Π΅Π²Π°Π΅ΠΌ Π΅ΠΉ 1 while (change) { change = false; for (int i = 0; i < 16; i++) { if (invariants[i] != i) { for (int j = 0; j < 16; j++) { if (invariants[j] == i) { int temp = invariants[i]; invariants[i] = invariants[j]; invariants[j] = temp; change = true; counter++; break; } } break; } } } if (counter % 2 != 0) { int temp = numbers[0][0]; numbers[0][0] = numbers[3][3]; numbers[3][3] = temp; } } public void JLabel() { Border solidBorder = BorderFactory.createLineBorder(Color.BLACK, 1); // ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π³ΡΠ°Π½ΠΈΡΡ ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ²Π΅ΡΠ° Font font = new Font("Verdana", Font.PLAIN, 12); // Π·Π°Π΄Π°Π΅ΠΌ ΡΠΈΠΏ ΡΡΠΈΡΡΠ°, ΠΈ Π΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅Ρ JLabel topLabel = new JLabel(); // ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ topLabel ΡΠΈΠΏΠ° JLabel //topLabel.setText("ΠΠ΄Π΅ΡΡ Π±ΡΠ΄Π΅Ρ ΡΠ΅ΠΊΡΠ½Π΄ΠΎΠΌΠ΅Ρ"); topLabel.setBorder(solidBorder); // ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π³ΡΠ°Π½ΠΈΡΡ topLabel.setFont(font); // ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠΈΠΏ ΡΠ΅ΠΊΡΡΠ° topLabel.setForeground(Color.RED); // Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠ²Π΅Ρ ΡΠ΅ΠΊΡΡΠ° menu.add(topLabel); // Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ JLabel Π½Π° ΠΏΠ΅Π½Π΅Π»Ρ menu } public void Timer() { int seconds = 0, minutes = 0; while (true) { seconds++; if (minutes != 0) topLabel.setText(minutes + ":" + seconds); // ΡΠ΅ΠΊΡΡ Π² JLabel //System.out.print(minutes + ":"); //System.out.println(seconds); if (seconds == 59) { seconds = -1; minutes++; } } } public void repaintField() { //ΠΌΠ΅ΡΠΎΠ΄ ΡΠ°ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ Π½Π° ΡΠ΅ΡΠΊΠ΅ panel.removeAll(); for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { JButton button = new JButton(Integer.toString(numbers[i][j])); button.setFocusable(false); panel.add(button); button.setBackground(Color.getHSBColor(0.1059322f, 0.5221239f, 0.8862745f)); // ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠ²Π΅Ρ ΠΊΠ½ΠΎΠΏΠΎΠΊ if (numbers[i][j] == 0) { button.setVisible(false); // ΡΠΎΠΊΡΡΡΠΈΠ΅ Π½ΡΠ»Π΅Π²ΠΎΠ³ΠΎ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π° } else button.addActionListener(new ClickListener()); } } panel.validate(); } public boolean checkWin() { //ΠΌΠ΅ΡΠΎΠ΄ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π²ΡΠΈΠ³ΡΡΡΠ° boolean status = true; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (i == 3 && j > 2) //ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΠΎ ΡΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΡΠ΅ΠΉΠΊΠ° Π² ΡΠ΅ΡΠΊΠ΅ ΠΏΡΡΡΠ°Ρ break; if (numbers[i][j] != i * 4 + j + 1) { //ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌ Π² ΡΠ΅ΡΠΊΠ΅ status = false; } } } return status; } private void createMenu() { menu = new JMenuBar(); JMenu fileMenu = new JMenu("File"); for (int i = 0; i < fileItems.length; i++) { JMenuItem item = new JMenuItem(fileItems[i]); JSeparator separator = new JSeparator(); item.setActionCommand(fileItems[i].toLowerCase()); item.addActionListener(new NewMenuListener()); fileMenu.add(item); fileMenu.add(separator); } //fileMenu.insertSeparator(1); menu.add(fileMenu); } private class NewMenuListener implements ActionListener { public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); if ("exit".equals(command)) { System.exit(0); } if ("statistic".equals(command)) { JOptionPane.showMessageDialog(null, "ΠΠ« ΠΠ«ΠΠΠ ΠΠΠ!", "ΠΠΎΠ·Π΄ΡΠ°Π²Π»ΡΠ΅ΠΌ", 1); } if ("new".equals(command)) { init(); repaintField(); } } } private class ClickListener implements ActionListener { public void actionPerformed(ActionEvent e) { JButton button = (JButton) e.getSource(); button.setVisible(false); String name = button.getText(); change(Integer.parseInt(name)); } } public void change(int num) { // ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²Ρ
ΠΎΠ΄ΡΡΠΈΡ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π° change ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ num ΡΠΈΠΏΠ° int int i = 0, j = 0; // ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ ΠΏΠ΅ΡΠΌΠ΅Π½Π½ΡΠΌ i ΠΈ j ΡΠΈΠΏΠ° int Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π²Π½ΠΎΠ΅ 0 for (int k = 0; k < 4; k++) { // ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅ΠΌ Π΅Π»Π΅ΠΌΠ΅Π½ΡΡ k ΠΎΡ 0 Π΄ΠΎ 3 for (int l = 0; l < 4; l++) { // ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅ΠΌ Π΅Π»Π΅ΠΌΠ΅Π½ΡΡ l ΠΎΡ 0 Π΄ΠΎ 3 if (numbers[k][l] == num) { // Π΅ΡΠ»ΠΈ ΠΌΠ°ΡΡΠΈΠ² numbers[k][l] ΡΠ°Π²Π½ΡΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ num ΡΠΎ, i = k; // ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ i ΠΏΡΠΈΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ k j = l; // ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ j ΠΏΡΠΈΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ l } } } /*ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π»ΠΎΠ³ΠΈΠΊΠΈ ΡΠ΄Π²ΠΈΠ³ΠΎΠ² ΠΊΠ½ΠΎΠΏΠΎΠΊ Π½Π° ΡΠ΅ΡΠΊΠ΅ 4 Π₯ 4*/ //ΡΠ΄Π²ΠΈΠ³ Π²Π²Π΅ΡΡ
ΠΏΠΎ ΡΡΡΠΎΠΊΠ°ΠΌ if (i > 0) { // ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΎΡΠ²Π΅ΡΠ°ΡΡΠ΅Π΅ Π·Π° ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΠ΄Π²ΠΈΠ½ΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ ΠΏΠΎ ΡΡΡΠΎΠΊΠ΅ if (numbers[i - 1][j] == 0) { //ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π° Ρ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΊΠΎΡΠΎΡΠ°Ρ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅ ΡΠ°Π²Π½Π° Π½ΡΠ»Ρ numbers[i - 1][j] = num; //ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ num Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π° numbers[i][j] = 0; //ΠΏΡΠΈΡΠ²Π°Π΅Π²Π°Π΅ΠΌ Π½ΡΠ»Π΅Π²ΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΠ²Π° Π² ΡΡΠ΅ΠΉΠΊΡ ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠ΅ΡΠ΅Π΄ ΡΡΠΈΠΌ ΡΠΌΠ΅ΡΠ°Π»Π°ΡΡ Π² Π½ΠΎΠ»Ρ } } //ΡΠ΄Π²ΠΈΠ³ Π²Π½ΠΈΠ· ΠΏΠΎ ΡΡΡΠΎΠΊΠ°ΠΌ if (i < 3) { if (numbers[i + 1][j] == 0) { numbers[i + 1][j] = num; numbers[i][j] = 0; } } //ΡΠ΄Π²ΠΈΠ³ Π²Π»Π΅Π²ΠΎ ΠΏΠΎ ΡΡΠΎΠ»Π±ΡΠ°ΠΌ if (j > 0) { if (numbers[i][j - 1] == 0) { numbers[i][j - 1] = num; numbers[i][j] = 0; } } //ΡΠ΄Π²ΠΈΠ³ Π²ΠΏΡΠ°Π²ΠΎ ΠΏΠΎ ΡΡΠΎΠ»Π±ΡΠ°ΠΌ if (j < 3) { if (numbers[i][j + 1] == 0) { numbers[i][j + 1] = num; numbers[i][j] = 0; } } repaintField(); if (checkWin()) { JOptionPane.showMessageDialog(null, "ΠΠ« ΠΠ«ΠΠΠ ΠΠΠ!", "ΠΠΎΠ·Π΄ΡΠ°Π²Π»ΡΠ΅ΠΌ", 1); init(); repaintField(); setVisible(false); setVisible(true); } } public static void main(String[] args) throws InterruptedException { Thread.sleep(1000); JFrame app = new pt(); app.setVisible(true); } }
I understand that the Timer method does not see the topLabel object. But why is not clear.
I would appreciate any help.