我用java写了个小程序,是用repaint在JFrame里面画图,用thread.sleep(500)控制画图速度,而且每画一步都更新一次label显示画了多少次。运行中不报错,但是点下去开始按钮后按钮一直保...
我用java写了个小程序,是用repaint在JFrame里面画图,用thread.sleep(500)控制画图速度,而且每画一步都更新一次label显示画了多少次。运行中不报错,但是点下去开始按钮后按钮一直保持在按下的状态,直到画完才弹起,label只在最后更新了一次,显示为15步,而图像没有任何动静。最小化再还原,才显示出画完最后一步的结果。本人菜鸟,对此困惑不已,请各位高手赐教~
源代码:(写不全,在补充里还有)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SolveTowers {
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame frame = new JFrame("Hanoi Tower");
frame.setBackground(Color.cyan);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new StartButton());
frame.pack();
frame.setVisible(true);
}
}
下一个类
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class StartButton extends JPanel {
static int i = 0;
static StartButton s = new StartButton();
private static int count;
private JButton push;
private static JLabel label, label1;
private JTextField NumbersOfTowers;
static int totalDisks;
static int[][] towers;
static int[] t = new int[3];
static boolean k = false;
public StartButton() {
NumbersOfTowers = new JTextField();
NumbersOfTowers.setText("4");
count = 0;
push = new JButton("Solve");
setLayout(null);
NumbersOfTowers.setBounds(370, 65, 40, 25);
push.setBounds(450, 65, 80, 25);
push.addActionListener(new ButtonListener());
label = new JLabel("Number of movements:" + count);
label1 = new JLabel("Enter the Number of Towers(no more than 10):");
label1.setBounds(100, 50, 400, 50);
label.setBounds(550, 50, 200, 50);
add(NumbersOfTowers);
add(push);
add(label);
add(label1);
setPreferredSize(new Dimension(800, 600));
setBackground(Color.cyan);
}
public class ButtonListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
int text = Integer.parseInt(NumbersOfTowers.getText());
if (text > 10)
JOptionPane.showMessageDialog(null,
"Don't make it larger than 10!");
else if (text <= 0)
JOptionPane.showMessageDialog(null,
"Don't you think less than 1 is of no meaning?!");
else {
towers = new int[3][text];
t[0] = text;
t[1] = 0;
t[2] = 0;
int tem = text;
for (int i = 0; i < text; i++) {
towers[0][i] = tem;
tem--;
}
count = 0;
label.setText("Number of movements:" + count);
totalDisks = text;
i++;
solve();
}
}
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.blue);
g.fillRect(100, 500, 150, 30);
g.fillRect(300, 500, 150, 30);
g.fillRect(500, 500, 150, 30);
g.drawLine(175, 180, 175, 500);
g.drawLine(375, 180, 375, 500);
g.drawLine(575, 180, 575, 500);
g.setColor(Color.orange);
if (t[0] != 0) {
for (int a = 0; a < t[0]; a++) {
g.setColor(Color.orange);
g.fillRect(160 - towers[0][a] * 5, 470 - 30 * a,
30 + 10 * towers[0][a], 30);
g.setColor(Color.black);
g.drawRect(160 - towers[0][a] * 5, 470 - 30 * a,
30 + 10 * towers[0][a], 30);
}
} else {
if (i == 0) {
g.setColor(Color.orange);
g.fillRect(140, 470, 70, 30);
g.fillRect(145, 440, 60, 30);
g.fillRect(150, 410, 50, 30);
g.fillRect(155, 380, 40, 30);
g.setColor(Color.black);
g.drawRect(140, 470, 70, 30);
g.rawRect(145, 440, 60, 30);
g.drawRect(150, 410, 50, 30);
g.drawRect(155, 380, 40, 30);
}
}
if (t[1] != 0) {
for (int a = 0; a < t[1]; a++) {
g.setColor(Color.orange);
g.fillRect(360 - towers[1][a] * 5, 470 - 30 * a,30 + 10 * towers[1][a], 30);
g.setColor(Color.black);
g.drawRect(360 - towers[1][a] * 5, 470 - 30 * a,30 + 10 * towers[1][a], 30);
}
}
我晕……剩下一点写不下了……发图片吧
呃……那您能帮我改改么?
展开