偶不用QQ或任何聊天工具。 好久不做swing了,如果没记错的话,可以自定义一个JPanel,覆盖里面的paint方法,paint的参数就是该控件的Graphics,你可以手工转型为G2D.以前我有一本O'Reilly的书,Java Examples in a Nutshell 3rd Edition(鳄鱼书),里面很大章节是关于这方面的,作者就是犀牛书的作者
哦,现在很多书都是说自定义一个JPanel,并覆盖里面的paint方法,不过我用的方法好像不用那么做。 public void lineOperation(MouseEvent e) { Graphics2D g = (Graphics2D)drawPanel.getGraphics();//相当于返回drawPanel环境的画笔 g.setStroke(new BasicStroke(Float.parseFloat((String)jComboBoxStroke.getSelectedItem())));//设置画线的粗细 g.setColor(mainColor);//设置画图色彩//下面开始画直线 /* In initial state setup default values for mouse coordinates */ if (initialLine) { setGraphicalDefaults(e); g.setXORMode(xorColor); g.drawLine(Orx,Ory,mousex,mousey); initialLine=false; } /* Make sure that the mouse has actually moved from its previous position. */ if (mouseHasMoved(e)) { /* Delete previous line shadow by xor-ing the graphical object */ g.setXORMode(xorColor); g.drawLine(Orx,Ory,mousex,mousey); /* Update new mouse coordinates */ mousex = e.getX(); mousey = e.getY(); /* Draw line shadow */ g.drawLine(Orx,Ory,mousex,mousey); } //在Jpanel上画线结束 }我用的是这样的方法,请问前辈该怎么改啊?
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;import javax.imageio.ImageIO;public class Test { public static void main(String[] args) throws Exception {
// 原始的图像,自己draw的也可以
BufferedImage original = ImageIO.read(new File("D:/test.jpg"));
// 新的图像宽度放大,高度缩小
BufferedImage image = new BufferedImage(original.getWidth() * 2, original
.getHeight() / 2, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = (Graphics2D) image.getGraphics();
// AffineTransform做效果的,这个是缩放,还有旋转等
g2d.drawRenderedImage(original, AffineTransform.getScaleInstance(2, 0.5));
ImageIO.write(image, "png", new File("D:/test2.png"));
}
}
感谢你的回复,有点头绪了,不过由于我实在是经验不足,怎么把Jpanel转换成BufferedImage?我现在做的课程设计是要求在Jpanel上用Graphics2D画图(如直线,自由画笔,矩形等,这些我都实现了),现在最坏的情况是把整个Jpanel放大或缩小,并能实时显示?哎~~前辈能QQ上交流一下么?估计是小问题,用不了多久的。我的QQ:312073548
好久不做swing了,如果没记错的话,可以自定义一个JPanel,覆盖里面的paint方法,paint的参数就是该控件的Graphics,你可以手工转型为G2D.以前我有一本O'Reilly的书,Java Examples in a Nutshell 3rd Edition(鳄鱼书),里面很大章节是关于这方面的,作者就是犀牛书的作者
哦,现在很多书都是说自定义一个JPanel,并覆盖里面的paint方法,不过我用的方法好像不用那么做。 public void lineOperation(MouseEvent e)
{
Graphics2D g = (Graphics2D)drawPanel.getGraphics();//相当于返回drawPanel环境的画笔
g.setStroke(new BasicStroke(Float.parseFloat((String)jComboBoxStroke.getSelectedItem())));//设置画线的粗细
g.setColor(mainColor);//设置画图色彩//下面开始画直线
/*
In initial state setup default values
for mouse coordinates
*/
if (initialLine)
{
setGraphicalDefaults(e);
g.setXORMode(xorColor);
g.drawLine(Orx,Ory,mousex,mousey);
initialLine=false;
} /*
Make sure that the mouse has actually
moved from its previous position.
*/
if (mouseHasMoved(e))
{
/*
Delete previous line shadow
by xor-ing the graphical object
*/
g.setXORMode(xorColor);
g.drawLine(Orx,Ory,mousex,mousey); /* Update new mouse coordinates */
mousex = e.getX();
mousey = e.getY(); /* Draw line shadow */
g.drawLine(Orx,Ory,mousex,mousey);
}
//在Jpanel上画线结束
}我用的是这样的方法,请问前辈该怎么改啊?
g.setTransform(AffineTransform.getScaleInstance(2,0.5)); // 记得,只设定一次,而不是事件触发,每次都调用
从此以后,你话的东西全经过scale处理了,如果想恢复原样,实现先保留g.getTransform(),然后再set回去
呃。。即如果我原本在Jpanel上画了一些图(直线或矩形啊什么的),即用正常比例画的,然后点一个button,触发事情之后可以使得原Jpanel上的所有图形同时放大或缩小呢?
好的,我试试吧,好像在网上看到有人用scale方法解决了,还是要慢慢想一下。