Graphics2D问题
这两天正在做一个画图程序,快要疯掉了
我是在一个jpanel上作图的,用主界面的“画图”菜单击活,可是当我点击菜单时什么也没有,只有当窗口大小改变时才显示出来,猜想是repaint问题,但是试过repaint和update都没用,还有,当图象显示出来时,如果再弹出一个对话框,连对话框也会重画在界面上,图象被画的一塌糊涂,请那位指点指点,我都快要疯了,不胜感激!
问题点数:100、回复次数:10Top
1 楼rocandroc(程序人生)回复于 2003-05-03 11:00:07 得分 50
因为具体程序不清楚什么也没有猜想是不是setlayout的问题。
给你一个源程序参考一下。
// Java core packages
import java.awt.*;
import java.awt.event.*;
// Java extension packages
import javax.swing.*;
public class SelfContainedPanel extends JPanel {
private int x1, y1, x2, y2;
// set up mouse event handling for SelfContainedPanel
public SelfContainedPanel()
{
// set up mouse listener
addMouseListener(
// anonymous inner class for mouse pressed and
// released event handling
new MouseAdapter() {
// handle mouse press event
public void mousePressed( MouseEvent event )
{
x1 = event.getX();
y1 = event.getY();
}
// handle mouse release event
public void mouseReleased( MouseEvent event )
{
x2 = event.getX();
y2 = event.getY();
repaint();
}
} // end anonymous inner class
); // end call to addMouseListener
// set up mouse motion listener
addMouseMotionListener(
// anonymous inner class to handle mouse drag events
new MouseMotionAdapter() {
// handle mouse drag event
public void mouseDragged( MouseEvent event )
{
x2 = event.getX();
y2 = event.getY();
repaint();
}
} // end anonymous inner class
); // end call to addMouseMotionListener
} // end constructor
// return preferred width and height of SelfContainedPanel
public Dimension getPreferredSize()
{
return new Dimension( 150, 100 );
}
// paint an oval at the specified coordinates
public void paintComponent( Graphics g )
{
super.paintComponent( g );
g.drawOval( Math.min( x1, x2 ), Math.min( y1, y2 ),
Math.abs( x1 - x2 ), Math.abs( y1 - y2 ) );
}
} // end class SelfContainedPanel
import java.awt.*;
import java.awt.event.*;
// Java extension packages
import javax.swing.*;
// Deitel packages
import SelfContainedPanel;
public class SelfContainedPanelTest extends JFrame {
private SelfContainedPanel myPanel;
// set up GUI and mouse motion event handlers for
// application window
public SelfContainedPanelTest()
{
// set up a SelfContainedPanel
myPanel = new SelfContainedPanel();
myPanel.setBackground( Color.yellow );
Container container = getContentPane();
container.setLayout( new FlowLayout() );
container.add( myPanel );
// set up mouse motion event handling
addMouseMotionListener(
// anonymous inner class for mouse motion event handling
new MouseMotionListener() {
// handle mouse drag event
public void mouseDragged( MouseEvent event )
{
setTitle( "Dragging: x=" + event.getX() +
"; y=" + event.getY() );
}
// handle mouse move event
public void mouseMoved( MouseEvent event )
{
setTitle( "Moving: x=" + event.getX() +
"; y=" + event.getY() );
}
} // end anonymous inner class
); // end call to addMouseMotionListener
setSize( 300, 200 );
setVisible( true );
}
// execute application
public static void main( String args[] )
{
SelfContainedPanelTest application =
new SelfContainedPanelTest();
application.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE );
}
} // end class SelfContainedPanelTest
Top
2 楼alexll(游文)回复于 2003-05-03 11:10:41 得分 10
试下重载repaint
或者用double bufferingTop
3 楼Eraserpro(叶·飘·零)回复于 2003-05-03 11:12:17 得分 20
你的第一个问题的原因可能是你的JPanel的宿主窗口(你是用JFrame吧!)中setVisible(true)写在setSize(a,b)之前所致.
第二个问题没遇到过,不过你最好用BufferedImage这个类做一下缓冲,画图在图像上画,然后在paint方法中显示这个BufferedImage,这样子会好点.Top
4 楼stone_q(Java虫)回复于 2003-05-04 18:52:53 得分 0
up
Top
5 楼jettyl(菜鸟一个)回复于 2003-05-04 20:10:22 得分 0
是不是repaint的位置写的不对Top
6 楼wangfc(秋水)回复于 2003-05-04 20:25:16 得分 20
通常不直接使用repaint,使用update。Top
7 楼beyond_xiruo(CorruptionException)回复于 2003-05-04 20:30:35 得分 0
没有具体的代码,难道要无的放失???!!!Top
8 楼stone_q(Java虫)回复于 2003-05-05 10:53:59 得分 0
代码很普通,就是在paint中画几条线,没有别的操作Top
9 楼stone_q(Java虫)回复于 2003-05-05 21:57:19 得分 0
upTop
10 楼stone_q(Java虫)回复于 2003-05-06 11:10:35 得分 0
为什么没有人理我了?Top




