java画板不显示

Python053

java画板不显示,第1张

import java.awt.*

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,然后分别添加 组件 和绘画,不会重叠。。

 

import java.awt.BasicStroke

import java.awt.BorderLayout

import java.awt.Color

import java.awt.FlowLayout

import java.awt.Frame

import java.awt.Graphics

import java.awt.Graphics2D

import java.awt.Label

import java.awt.Panel

import java.awt.event.MouseAdapter

import java.awt.event.MouseEvent

import java.awt.event.MouseMotionListener

import java.awt.event.WindowAdapter

import java.awt.event.WindowEvent

public class MouseDrawPanel extends Frame

{

private static final long serialVersionUID = 1L

MouseEvent e = null

int startX = -1

int startY = -1

int endX = -1

int endY = -1

boolean left = false

public MouseDrawPanel ( String title )

{

setTitle (title)

setLayout (new BorderLayout ())

setResizable (false)

setSize (500, 400)

setLocationRelativeTo (null)

addWindowListener (new WindowAdapter ()

{

@Override

public void windowClosing ( WindowEvent e )

{

System.exit (0)

}

})

}

@Override

public void paintComponents ( Graphics g )

{

float lineWidth = 8.0f

( (Graphics2D) g ).setStroke (new BasicStroke (lineWidth))

g.setColor (Color.YELLOW)

g.drawLine (startX, startY, endX, endY)

g.dispose ()

}

public static void main ( String[] args )

{

final MouseDrawPanel mdp = new MouseDrawPanel ("Use Mouse Draw")

Panel panel = new Panel ()

panel.setLayout (new FlowLayout (FlowLayout.LEFT))

Label startL = new Label ("start: ")

Label endL = new Label ("end: ")

final Label nowL = new Label ("now: ")

final Label startR = new Label ("000,000")

final Label endR = new Label ("000,000")

final Label nowN = new Label ("000,000")

panel.add (startL)

panel.add (startR)

panel.add (endL)

panel.add (endR)

panel.add (nowL)

panel.add (nowN)

mdp.add (panel, "South")

mdp.addMouseMotionListener (new MouseMotionListener ()

{

@Override

public void mouseMoved ( MouseEvent e )

{

if (mdp.left)

{

nowN.setText (e.getX () + " , " + e.getY ())

}

}

@Override

public void mouseDragged ( MouseEvent e )

{

if (mdp.left)

{

mdp.endX = e.getX ()

mdp.endY = e.getY ()

mdp.paintComponents (mdp.getGraphics ())

mdp.startX = mdp.endX

mdp.startY = mdp.endY

endR.setText (mdp.endX + " , " + mdp.endY)

}

}

})

mdp.addMouseListener (new MouseAdapter ()

{

@Override

public void mousePressed ( MouseEvent e )

{

if (e.getButton () == MouseEvent.BUTTON1)

{

mdp.startX = e.getX ()

mdp.startY = e.getY ()

startR.setText (mdp.startX + " , " + mdp.startY)

mdp.left = true

}

else

{

mdp.left = false

}

}

@Override

public void mouseReleased ( MouseEvent e )

{

if (mdp.left)

{

endR.setText (e.getX () + " , " + e.getY ())

}

}

})

mdp.setVisible (true)

}

}