新人第一次发帖,求懂java的老哥搭救
import java.awt.image.BufferStrategy;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.*;
import java.util.concurrent.TimeUnit;
public class SortMonitor extends JFrame implements Runnable{
private static final int BOARD_WIDTH = 640;
private static final int BOARD_HEIGHT = 480;
private static int size;
private static final int TOTAL_STEP_SPACE = 100;
private static final int STEP_SPACE = TOTAL_STEP_SPACE / 300;
private BufferStrategy bs;
private Thread sortThread;
// private SortArgorithams sa;
private Canvas canvas;
private volatile boolean running = false;
private int[] sortArr = new int[300],
world = new int[300];//only sort the height of the rectangle
// public SortMonitor() {}
private SortMonitor(int size) {
SortMonitor.size = size;
}
protected void createAndShowGUI() {
canvas = new Canvas();
canvas.setSize(BOARD_WIDTH, BOARD_HEIGHT);
canvas.setBackground(Color.BLACK);
canvas.setIgnoreRepaint(true);
getContentPane().add(canvas, BorderLayout.CENTER);
// getContentPane().add(new SortPanel(), BorderLayout.SOUTH);
setTitle("Sort Argoritham Monitor");
setIgnoreRepaint(true);
pack();
setVisible(true);
canvas.createBufferStrategy(2);
bs = canvas.getBufferStrategy();
sortThread = new Thread(this);
sortThread.start();
}
protected void onWindowClosing() {
try {
running = false;
sortThread.join();
}catch(InterruptedException e) {
throw new RuntimeException(e);
}
System.exit(0);
}
private void sleep(long sleep) {
try {
TimeUnit.MILLISECONDS.sleep(sleep);
}catch(InterruptedException e) {
throw new RuntimeException(e);
}
}
public void run() {
running = true;
initialize();
while(running)
sortLoop();
}
private void initialize() {
for(int i = 0 ; i < size; i++)
sortArr[i] = i;
}
private void renderFrame() {
do {
do {
Graphics g = null;
try {
g = bs.getDrawGraphics();
g.clearRect(0, 0, canvas.getWidth(), canvas.getHeight());
render(g);
}finally {
if(g != null)
g.dispose();
}
}while(bs.contentsRestored());
bs.show();
}while(bs.contentsLost());
}
private void sortLoop() {
renderFrame();
sleep(1L);
}
private void render(Graphics g) {
//Handle graphics
// sortArr = sa.getArray();
for(int i = 0 ;i < sortArr.length; i++)
world[i] = sortArr[i];
//sa.sort();
int maxWidth = canvas.getWidth();
int maxHeight = canvas.getHeight();
int recWidth = (maxWidth - TOTAL_STEP_SPACE) / sortArr.length;
g.setColor(Color.GREEN);
int recHeight;
for(int i = 0 ; i < sortArr.length; i++) {
recHeight = (world[i] / sortArr.length) * (int)(maxHeight * 0.9);
g.fillRect(i * (STEP_SPACE + recWidth),
maxHeight - recHeight, recWidth, recHeight);
}
}
//use to manager components
public static void main(String[] args) {
SortMonitor s = new SortMonitor(300);
s.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
s.onWindowClosing();
}
});
SwingUtilities.invokeLater(new Runnable() {
public void run() {
s.createAndShowGUI();
}
});
}
}
我想用一个for 循环去把数组里的数据都转化为矩形,通过他们的值和canvas的比例得出矩形的高。
矩形的宽就用canvas的宽除以数组的长度来计算。通过定义一个stepspace来确定他们的间距.
但是为什么一个矩形都画不出来?