java画一个圆 画一个圆,不停得转动,用一个按钮控制它,点一下就停,在点一下就转,并且圆上面还要分几个区域,就像摇奖机一样,求大神们帮助,一点思路都没有 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Graphics2D 支持用 Transform 在drawImage时做旋转。楼主只需要先把这个圆画到一个BufferImage里面去就行了。Google下应该大把样例代码。 import java.awt.*;import java.awt.event.*;import javax.swing.*;public class CircleFrame extends JFrame{ private CirclePanel circlePanel = new CirclePanel(); private JButton btnStop = new JButton("Stop"); private CircleThread circleThread = new CircleThread(circlePanel, true); public CircleFrame() { this.setLayout(new BorderLayout()); this.add(circlePanel, BorderLayout.CENTER); this.add(btnStop, BorderLayout.SOUTH); //貌似我的电脑上North方向也出现了一个JButton,不知道是不是java虚拟机的bug btnStop.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { if (btnStop.getText().equals("Stop")) { btnStop.setText("Continue"); circleThread.setIsCircling(false); } else { btnStop.setText("Stop"); circleThread.setIsCircling(true); } } }); circleThread.start(); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { JFrame frame = new CircleFrame(); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }); }}class CirclePanel extends JPanel{ private int startAngle = 0; private int arcAngle = 90; //只有四种颜色,每种颜色占90度 public CirclePanel() { this.setPreferredSize(new Dimension(400, 400)); } public void paintComponent(Graphics g) { super.paintComponents(g); g.setColor(Color.RED); //这里为了简便,只画了四种颜色 g.fillArc(100, 100, 200, 200, startAngle, arcAngle); g.setColor(Color.YELLOW); g.fillArc(100, 100, 200, 200, startAngle + arcAngle, arcAngle); g.setColor(Color.BLUE); g.fillArc(100, 100, 200, 200, startAngle + arcAngle * 2, arcAngle); g.setColor(Color.GREEN); g.fillArc(100, 100, 200, 200, startAngle + arcAngle * 3, arcAngle); } public void setStartAngle(int startAngle) { this.startAngle = startAngle; }}class CircleThread extends Thread{ private CirclePanel circlePanel; private boolean isCircling; public CircleThread(CirclePanel circlePanel, boolean isCircling) { this.circlePanel = circlePanel; this.isCircling = isCircling; } public void setIsCircling(boolean isCircling) { this.isCircling = isCircling; } public void run() { for (int i = 0; ; i++) { while (! isCircling) //用于暂停旋转的 { try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } circlePanel.setStartAngle(i % 360); //设置不同的起始旋转角度 circlePanel.repaint(); try { Thread.sleep(1); //这个是旋转每度的间隔时间,如果太小好像动画看上去会不流畅 } catch (InterruptedException e) { e.printStackTrace(); } } }} 谢谢了,汗。最后自己在书上面找到了案例对照的理解了Graphics X, 为什么提示没有MAIN方法? 一个类的所有方法都是抽象方法,为啥不用接口就好? 寻求一解决思路(关于javaIO方面的) java调用外部exe文件的问题 这是本人做的简单的线程池的代码?请各位高手看看原理有没错。 大文本文件数据对比方案 急救100分,JBuilder 6 的注册码 java連接數據庫的問題 捧场高分::讨论一下程序员的将来吧? 求救:有谁知道jbuilder5的Serial Number 和Key?我急需? com.swimap.imap.common包 synchronized 的问题
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class CircleFrame extends JFrame
{
private CirclePanel circlePanel = new CirclePanel();
private JButton btnStop = new JButton("Stop");
private CircleThread circleThread = new CircleThread(circlePanel, true);
public CircleFrame()
{
this.setLayout(new BorderLayout());
this.add(circlePanel, BorderLayout.CENTER);
this.add(btnStop, BorderLayout.SOUTH); //貌似我的电脑上North方向也出现了一个JButton,不知道是不是java虚拟机的bug
btnStop.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
if (btnStop.getText().equals("Stop"))
{
btnStop.setText("Continue");
circleThread.setIsCircling(false);
}
else
{
btnStop.setText("Stop");
circleThread.setIsCircling(true);
}
}
});
circleThread.start();
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
JFrame frame = new CircleFrame();
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
});
}
}class CirclePanel extends JPanel
{
private int startAngle = 0;
private int arcAngle = 90; //只有四种颜色,每种颜色占90度
public CirclePanel()
{
this.setPreferredSize(new Dimension(400, 400));
}
public void paintComponent(Graphics g)
{
super.paintComponents(g);
g.setColor(Color.RED); //这里为了简便,只画了四种颜色
g.fillArc(100, 100, 200, 200, startAngle, arcAngle);
g.setColor(Color.YELLOW);
g.fillArc(100, 100, 200, 200, startAngle + arcAngle, arcAngle);
g.setColor(Color.BLUE);
g.fillArc(100, 100, 200, 200, startAngle + arcAngle * 2, arcAngle);
g.setColor(Color.GREEN);
g.fillArc(100, 100, 200, 200, startAngle + arcAngle * 3, arcAngle);
}
public void setStartAngle(int startAngle)
{
this.startAngle = startAngle;
}
}class CircleThread extends Thread
{
private CirclePanel circlePanel;
private boolean isCircling;
public CircleThread(CirclePanel circlePanel, boolean isCircling)
{
this.circlePanel = circlePanel;
this.isCircling = isCircling;
}
public void setIsCircling(boolean isCircling)
{
this.isCircling = isCircling;
}
public void run()
{
for (int i = 0; ; i++)
{
while (! isCircling) //用于暂停旋转的
{
try
{
Thread.sleep(10);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
circlePanel.setStartAngle(i % 360); //设置不同的起始旋转角度
circlePanel.repaint();
try
{
Thread.sleep(1); //这个是旋转每度的间隔时间,如果太小好像动画看上去会不流畅
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}