swing 图像翻转 程序里面需要一个随时间变化图形翻转的功能, 就是自己在那儿转, 不知道swing里面有没有专门的方法呢?或者还是需要不停的重画?谢啦 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把正方形画在空image上,然后旋转image 以下例子是引用以为高手的,你试试。import java.awt.Color;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Image;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.geom.AffineTransform;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;public class Test4Rotate extends JFrame { private static final long serialVersionUID = 1L; public static void main(String[] args) { new Test4Rotate(); } public Test4Rotate() { setSize(500, 300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final MyPanel mp = new MyPanel(); getContentPane().add(mp); mp.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent mouseevent) { int diagonal = (int)(50/Math.sin(Math.toRadians(45))); int x = 5 + (diagonal-50)/2; int y = 5 + (diagonal-50)/2; mp.bi = new BufferedImage(diagonal + 10 , diagonal + 10, BufferedImage.TRANSLUCENT); Graphics g = mp.bi.getGraphics(); g.setColor(Color.red); g.drawLine(x, y, x+50, y); g.setColor(Color.blue); g.drawLine(x+50, y, x+50, y+50); g.setColor(Color.green); g.drawLine(x, y, x, y+50); g.setColor(Color.orange); g.drawLine(x, y+50, x+50, y+50); mp.repaint(); } }); JButton jb = new JButton(); jb.setText("right 15°"); jb.setSize(80, 20); jb.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { mp.rotate = (mp.rotate + 15) % 360; mp.repaint(); } }); mp.add(jb); setVisible(true); } class MyPanel extends JPanel { private static final long serialVersionUID = 1L; private BufferedImage bi = null; private double rotate = 0; AffineTransform trans = null; private Image back = null; public MyPanel() { super(); setOpaque(false); trans = new AffineTransform(); try { back = ImageIO.read(new File("c:\\1.jpg")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void paintComponent(Graphics g) { g.drawImage(back, 0, 0, 500, 300, null); if (null != bi) { Graphics2D gg = (Graphics2D)g; trans.setToIdentity(); trans.setToRotation(Math.toRadians(rotate), bi.getWidth()/2, bi.getHeight()/2); //gg.drawImage(back, trans, null); gg.drawImage(bi, trans, null); } super.paintComponent(g); } }} 如何用Hash Table实现查找遍历过的节点? 怎样让JFrame不能最小化? 询问一个关于内部类的问题 关于JDK5中使用ThreadLocal的问题 SWING 画出的直线能否加事件? java好书好多! 取系统时间和String转换成date型的奇怪问题。。。真得很奇怪阿。。。 各们前辈 菜鸟问题:数据库中数据的变换如何即时地反映到树上? 为什么总是得到“Cannot load driver ‘org.gjt.mm.mysql.Driver’” Runtime.getRuntime().exec()问题,高手帮帮忙... 大家帮忙给出经典的方法
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;public class Test4Rotate extends JFrame {
private static final long serialVersionUID = 1L; public static void main(String[] args) {
new Test4Rotate();
}
public Test4Rotate() {
setSize(500, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final MyPanel mp = new MyPanel();
getContentPane().add(mp);
mp.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent mouseevent) {
int diagonal = (int)(50/Math.sin(Math.toRadians(45)));
int x = 5 + (diagonal-50)/2;
int y = 5 + (diagonal-50)/2;
mp.bi = new BufferedImage(diagonal + 10 , diagonal + 10, BufferedImage.TRANSLUCENT);
Graphics g = mp.bi.getGraphics();
g.setColor(Color.red);
g.drawLine(x, y, x+50, y);
g.setColor(Color.blue);
g.drawLine(x+50, y, x+50, y+50);
g.setColor(Color.green);
g.drawLine(x, y, x, y+50);
g.setColor(Color.orange);
g.drawLine(x, y+50, x+50, y+50);
mp.repaint();
}
});
JButton jb = new JButton();
jb.setText("right 15°");
jb.setSize(80, 20);
jb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
mp.rotate = (mp.rotate + 15) % 360;
mp.repaint();
}
});
mp.add(jb);
setVisible(true);
}
class MyPanel extends JPanel {
private static final long serialVersionUID = 1L;
private BufferedImage bi = null;
private double rotate = 0;
AffineTransform trans = null;
private Image back = null; public MyPanel() {
super();
setOpaque(false);
trans = new AffineTransform();
try {
back = ImageIO.read(new File("c:\\1.jpg"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} @Override
public void paintComponent(Graphics g) {
g.drawImage(back, 0, 0, 500, 300, null);
if (null != bi) {
Graphics2D gg = (Graphics2D)g;
trans.setToIdentity();
trans.setToRotation(Math.toRadians(rotate), bi.getWidth()/2, bi.getHeight()/2);
//gg.drawImage(back, trans, null);
gg.drawImage(bi, trans, null);
}
super.paintComponent(g);
}
}}