Hãy thử để nút dừng cung cấp tổng số đang chạy khi người dùng nhấp vào bắt đầu. Nút dừng không cung cấp tổng số cũng như không lưu số mà nó bắt đầu đưa ra khi bạn nhấp vào.
Tôi đang làm gì sai ở đây?
gói com.egroegnosbig.dicerollergui;
nhập java.awt.BorderLayout;
nhập java.awt.Color;
nhập java.awt.Dimension;
nhập java.awt.Font;
nhập java.awt.event.ActionEvent;
nhập java.awt.event.ActionListener;
nhập javax.swing.AbstractButton;
import javax.swing.ImageIcon;
nhập javax.swing.JButton;
nhập javax.swing.JFrame;
nhập javax.swing.JLabel;
nhập javax.swing.JPanel;
nhập javax.swing.JTextField;
lớp công khai Câu cá {
public static void main(String[] args) {
// tạo Jframe
Khung JFrame = JFrame mới ("Trò chơi câu cá");
Bảng điều khiển JPanel = JPanel mới (BorderLayout mới());
panel.setPreferredSize(New Dimension(600.600));
//hai bảng trong bảng chính
Bảng điều khiển JPanel = JPanel mới();
Bảng điều khiển JPanel = JPanel mới();
panelup.setBackground(Color.white);
//hình ảnh tiêu đề có lớp phủ từ
ImageIcon pole1 = new ImageIcon("fishingpole.png");
Tiêu đề JLabel = JLabel mới (cực1);
title.setBounds(150, 0,325,175);
title.setText("Đi câu cá?");
title.setFont(Phông chữ mới("Ravie", Font. BÓNG, 30));
title.setForeground(Color.green);
title.setHorizontalTextPosition(JLabel.CENTER);
title.setVerticalTextPosition(JLabel.CENTER);
title.setOpaque(false);
panelup.add(tiêu đề);
panelup.setPreferredSize(new Dimension(600,375));
panelup.setLayout(null);
Điểm JLabel = new JLabel("Hãy xem bạn đã bắt được gì!
(nhấp vào bắt đầu để tiếp tục) " );
point.setForeground(Color.blue);
point.setFont(Phông chữ mới(null, Font. BÓNG, 20));
point.setBounds(10,150, 450, 100);
panelup.add(điểm);
JTextField đã bắt được = JTextField mới(20);
bị bắt.setSize(10,10);
Catch.setFont(new Font("Times New Roman", Font. BÓNG, 15));
bị bắt.setForeground(Color.RED);
bị bắt.setBounds(10,230,350,30);
panelup.add(bị bắt);
Tổng số JTextField = JTextField mới (20);
Total.setSize(10,10);
Total.setFont(New Font("Times New Roman", Font. BÓNG, 15));
Total.setForeground(Color.RED);
Total.setBounds(325,315,150,30);
panelup.add(tổng);
**Đây là nút dừng**
JLabel End = new JLabel("Tất cả đã xong?! Nhấn Dừng và Hãy
xem bạn đã làm tốt như thế nào!" );
End.setForeground(Color.blue);
End.setFont(Phông chữ mới(null, Font. BÓNG, 20));
End.setBounds(10, 310, 325, 50);
panelup.add(Kết thúc);
JTextField đơn = JTextField mới(20);
single.setSize(10,10);
single.setFont(new Font("Times New Roman", Font. BÓNG, 15));
single.setForeground(Color.RED);
single.setBounds(10,275,100,30);
panelup.add(đơn);
// Nhãn yêu cầu người dùng tiếp tục
ImageIcon bobber = new ImageIcon("bobber2.jpg");
JButton bắt đầu = JButton mới (bobber);
start.setBorderPainted(false);
start.setBounds(350, 170,100,100);
start.setText("Bắt đầu!");
start.setFont(Phông chữ mới("Serif", Font. BÓNG, 20));
start.setForeground(Color.black);
start.setHorizontalTextPosition(JLabel.CENTER);
start.setVerticalTextPosition(JLabel.CENTER);
start.setOpaque(false);
panelup.add(bắt đầu);
ImageIcon bobber2 = new ImageIcon("bobber2.jpg");
JButton dừng= JButton mới (bobber2);
stop.setBorderPainted(false);
stop.setBounds(450, 170,100,100);
stop.setText("Dừng lại!");
stop.setFont(Phông chữ mới("Serif", Font. BÓNG, 25));
stop.setForeground(Color.black);
stop.setHorizontalTextPosition(JLabel.CENTER);
stop.setVerticalTextPosition(JLabel.CENTER);
stop.setOpaque(false);
panelup.add (dừng);
start.addActionListener(ActionListener mới()
{
public void actionPerformed(ActionEvent e)
{
đầu vào kép = 0;
số int = 0;
int điểm2 = 0;
int chết;
die = (int)(Math.random()*6) + 1;
nếu (chết == 1)
{
started.setText("Người chiến thắng bữa tối cá chiên! Cá da trơn ");
điểm2 = 10;
}
nếu (chết == 2)
{
started.setText("Nemo! Đi thẳng vào tù. ");
điểm2 = 15;
}
nếu (chết == 3)
{
started.setText("Giày hôi quá!");
điểm2 = 5;
}
nếu (chết == 4)
{
Catch.setText("Cá voi, cá ngừ lớn ");
điểm2 = 30;
}
nếu (chết == 5)
{
started.setText("Yumm Yumm Bass Pro");
điểm2 = 25;
}
nếu (chết == 6)
{
started.setText("Đó có phải là bệ ngồi bồn cầu không!? ");
điểm2 = 10;
}
đếm += điểm2;
single.setText(point2 + "");
{
}
}
}
);
stop.addActionListener(ActionListener mới()
{
public void actionPerformed(ActionEvent e)
{
int Total2 = 0;
int tổng điểm =0;
tổng điểm += tổng2;
Total2 = Integer.parseInt(single.getText());
tổng điểm += tổng2;
Total.setText(""+ tổng điểm);
}
}
);
//hình ảnh bảng điều khiển
ImageIcon nước = ImageIcon mới("water.jpg");
JLabel pic = JLabel mới (nước);
paneldown.add(pic, BorderLayout.SOUTH);
// định vị bảng điều khiển
panel.add(panelup, BorderLayout.NORTH);
panel.add(paneldown, BorderLayout.SOUTH);
//đặt khung với bảng điều khiển
Frame.add(bảng);
Frame.pack();
Frame.setLocationRelativeTo(null);
Frame.setSize(600,600);
Frame.setVisible(true);
}
}
Đây là một vấn đề phạm vi thay đổi. Chỉ cần di chuyển các biến đến nơi có phạm vi rõ ràng hơn, bạn có thể truy cập chúng theo nhiều cách hơn (nói một cách đơn giản)
nhập java.awt.*;
import java.awt.event.*;
nhập javax.swing.*;
lớp công khai Câu cá {
public static void main(String[] args) {
// Đây là nơi các biến được chuyển đến
int cuối cùng[] Total2 = {
0
};
tổng điểm cuối cùng int[] = {
0
};
// tạo Jframe
Khung JFrame = JFrame mới ("Trò chơi câu cá");
Frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
Bảng điều khiển JPanel = JPanel mới (BorderLayout mới());
panel.setPreferredSize(New Dimension(600, 600));
//hai bảng trong bảng chính
Bảng điều khiển JPanel = JPanel mới();
Bảng điều khiển JPanel = JPanel mới();
panelup.setBackground(Color.white);
//hình ảnh tiêu đề có lớp phủ từ
ImageIcon pole1 = new ImageIcon("fishingpole.png");
Tiêu đề JLabel = JLabel mới (cực1);
title.setBounds(150, 0, 325, 175);
title.setText("Đi câu cá?");
title.setFont(Phông chữ mới("Ravie", Font. BÓNG, 30));
title.setForeground(Color.green);
title.setHorizontalTextPosition(JLabel.CENTER);
title.setVerticalTextPosition(JLabel.CENTER);
title.setOpaque(false);
panelup.add(tiêu đề);
panelup.setPreferredSize(new Dimension(600, 375));
panelup.setLayout(null);
Điểm JLabel = new JLabel("Hãy xem bạn đã bắt được gì!
(nhấp vào bắt đầu để tiếp tục) ");
point.setForeground(Color.blue);
point.setFont(Phông chữ mới(null, Font. BÓNG, 20));
point.setBounds(10, 150, 450, 100);
panelup.add(điểm);
JTextField đã bắt được = JTextField mới(20);
bị bắt.setSize(10, 10);
Catch.setFont(new Font("Times New Roman", Font. BÓNG, 15));
bị bắt.setForeground(Color.RED);
bị bắt.setBounds(10, 230, 350, 30);
panelup.add(bị bắt);
Tổng số JTextField = JTextField mới (20);
Total.setSize(10, 10);
Total.setFont(New Font("Times New Roman", Font. BÓNG, 15));
Total.setForeground(Color.RED);
Total.setBounds(325, 315, 150, 30);
panelup.add(tổng);
// NÚT DỪNG
JLabel End = new JLabel("Tất cả đã xong?! Nhấn Dừng và Hãy
xem bạn đã làm tốt như thế nào!");
End.setForeground(Color.blue);
End.setFont(Phông chữ mới(null, Font. BÓNG, 20));
End.setBounds(10, 310, 325, 50);
panelup.add(Kết thúc);
JTextField đơn = JTextField mới(20);
single.setSize(10, 10);
single.setFont(new Font("Times New Roman", Font. BÓNG, 15));
single.setForeground(Color.RED);
single.setBounds(10, 275, 100, 30);
panelup.add(đơn);
// Nhãn yêu cầu người dùng tiếp tục
ImageIcon bobber = new ImageIcon("bobber2.jpg");
JButton bắt đầu = JButton mới (bobber);
start.setBorderPainted(false);
start.setBounds(350, 170, 100, 100);
start.setText("Bắt đầu!");
start.setFont(Phông chữ mới("Serif", Font. BÓNG, 20));
start.setForeground(Color.black);
start.setHorizontalTextPosition(JLabel.CENTER);
start.setVerticalTextPosition(JLabel.CENTER);
start.setOpaque(false);
panelup.add(bắt đầu);
ImageIcon bobber2 = new ImageIcon("bobber2.jpg");
Dừng JButton = JButton mới (bobber2);
stop.setBorderPainted(false);
stop.setBounds(450, 170, 100, 100);
stop.setText("Dừng lại!");
stop.setFont(Phông chữ mới("Serif", Font. BÓNG, 25));
stop.setForeground(Color.black);
stop.setHorizontalTextPosition(JLabel.CENTER);
stop.setVerticalTextPosition(JLabel.CENTER);
stop.setOpaque(false);
panelup.add (dừng);
start.addActionListener(ActionListener mới() {
public void actionPerformed(ActionEvent e) {
đầu vào kép = 0;
số int = 0;
int điểm2 = 0;
int chết;
die = (int) (Math.random() * 6) + 1;
nếu (chết == 1) {
started.setText("Người chiến thắng bữa tối cá chiên! Cá da trơn ");
điểm2 = 10;
}
nếu (chết == 2) {
started.setText("Nemo! Đi thẳng vào tù. ");
điểm2 = 15;
}
nếu (chết == 3) {
started.setText("Giày hôi quá!");
điểm2 = 5;
}
nếu (chết == 4) {
Catch.setText("Cá voi, cá ngừ lớn ");
điểm2 = 30;
}
nếu (chết == 5) {
started.setText("Yumm Yumm Bass Pro");
điểm2 = 25;
}
nếu (chết == 6) {
started.setText("Đó có phải là bệ ngồi bồn cầu không!? ");
điểm2 = 10;
}
đếm += điểm2;
single.setText(point2 + "");
tổng điểm[0] += điểm2;
}
});
stop.addActionListener(ActionListener mới() {
public void actionPerformed(ActionEvent e) {
thử {
Total2[0] = Integer.parseInt(single.getText());
} bắt (NumberFormatException ee) {
// Nếu có một đầu vào trống từ single.getText();, thì đặt tổng 2 bằng 0 để tránh lỗi lớn hơn
Total2[0] = 0 // Một cách khác để xử lý ngoại lệ
}
Total.setText("" + Totalpoints[0]);
}
});
//hình ảnh bảng điều khiển
ImageIcon nước = ImageIcon mới("water.jpg");
JLabel pic = JLabel mới (nước);
paneldown.add(pic, BorderLayout.SOUTH);
// định vị bảng điều khiển
panel.add(panelup, BorderLayout.NORTH);
panel.add(paneldown, BorderLayout.SOUTH);
//đặt khung với bảng điều khiển
Frame.add(bảng);
Frame.pack();
Frame.setLocationRelativeTo(null);
Frame.setSize(600, 600);
Frame.setVisible(true);
}
}
Lý do tôi chuyển đổi các biến thành một mảng là vì các biến này được truy cập từ lớp bên trong và chúng cần được khai báo cuối cùng hoặc cuối cùng một cách hiệu quả. Đọc thêm trong bài viết này(đây)
BTW, (IMHO) mã gốc của bạn được định dạng rất kém. Nếu bạn đăng nhiều mã, hãy lưu ý rằng ai đó không phải bạn phải đọc mã đó, vì ngay cả trình định dạng tự động của IDE của tôi cũng không thể khắc phục được điều này.
EDIT: Mã được cập nhật để bao gồm các câu lệnh bổ sung nhằm thêm chức năng. EDIT 2: Mã được cập nhật để xử lý ngoại lệ theo cách tốt hơn
Tôi là một lập trình viên xuất sắc, rất giỏi!