import javax.swing.*
import java.awt.event.*
public class Painter extends JFrame
{
private int xValue=0,yValue=0
public Painter()
{
super("A Simple paint program")
getContentPane().add(new JLabel("Drag the Mouse To Paint"),"South")
/*addMouseMotionListener(
new MouseMotionAdapter(){
public void mouseDragged(MouseEvent e)
{
xValue=e.getX()
yValue=e.getY()
repaint()
}
}
)*/
setSize(300,300)
setVisible(true)
}
/*
public void paint(Graphics g)
{
g.fillOval(xValue,yValue,4,4)
}*/
public static void main(String[] args)
{
Painter frame=new Painter()
}
}
这主要是paint(Griphics g)方法的问题
注意java.awt包和javax.swing包中的类的层次问题
java.lang.Object ->java.awt.Component ->java.awt.Label
java.lang.Object
-> java.awt.Component
-> java.awt.Container
-> javax.swing.JComponent
-> javax.swing.JLabel
而在java.awt.Component和javax.swing.JComponent都分别根据组件的清重量级定义了不同实现方式的paint方法
在你的程序中,你是在JFrame中直接进行绘画,而JFrame属于重量级组件,Label属于偏重量级JLabel属于偏轻(轻重的区别就是是否跟本地系统有太大关系)。。JFrame JWindow JDialog 等等。。并且你绘画的区域和你添加Label
的位置有重叠。。。诸多原因导致了无法显示
建议:将绘画的组件 改成JPanel。。可以多分级绘画,也可以并列多个JPanel,然后分别添加 组件 和绘画,不会重叠。。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)