import java.awt.BasicStroke
import java.awt.BorderLayout
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
static int startX = -1
static int startY = -1
static int endX = -1
static int endY = -1
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.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 )
{
nowN.setText (e.getX () + " , " + e.getY ())
}
@Override
public void mouseDragged ( MouseEvent e )
{
endX = e.getX ()
endY = e.getY ()
mdp.paintComponents (mdp.getGraphics ())
startX = endX
startY = endY
endR.setText (endX + " , " + endY)
}
})
mdp.addMouseListener (new MouseAdapter ()
{
@Override
public void mousePressed ( MouseEvent e )
{
startX = e.getX ()
startY = e.getY ()
startR.setText (startX + " , " + startY)
}
@Override
public void mouseReleased ( MouseEvent e )
{
endR.setText (e.getX () + " , " + e.getY ())
}
})
mdp.setVisible (true)
}
}
我基于你原来画图的方法,添加了事件触发的命令b[j].setActionCommand("b" + j)否则你不能在事件响应处理的方法中使用e.getActionCommand(),而且字符串的比较用equals方法比较好。现在可以运行了,你可以看一下:import java.applet.Applet
import java.awt.*
import java.awt.event.ActionEvent
import java.awt.event.ActionListener
public class drawing extends Applet implements ActionListener {
Button b[] = new Button[5]
String fontname = "仿宋_GB2312"
int style = Font.PLAIN
int size = 24
int index = 0
Font myfont
public void init() {
setSize(700,700)
myfont = new Font(fontname, style, size)
b[0] = new Button("扇形")
b[1] = new Button("圆形")
b[2] = new Button("三角形")
b[3] = new Button("长方形")
b[4] = new Button("椭圆形")
for (int j = 0j <b.lengthj++) {
b[j].setBounds(10, 10, 50, 20)
b[j].addActionListener(this)
b[j].setActionCommand("b" + j)
add(b[j])
}
}
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("b0")) {
index = 0
repaint()
}
if (e.getActionCommand().equals("b1")) {
index = 1
repaint()
}
if (e.getActionCommand().equals("b2")) {
index = 2
repaint()
}
if (e.getActionCommand().equals("b3")) {
index = 3
repaint()
}
if (e.getActionCommand().equals("b4")) {
index = 4
repaint()
}
}
public void paint(Graphics g) {
switch (index) {
case 0:
g.fillArc(0, 60, 80, 60, 30, 120)
break
case 1:
g.drawOval( 300, 50, 60, 60)
break
case 2:
Polygon filledPolygon = new Polygon()
filledPolygon.addPoint(380, 50)
filledPolygon.addPoint(380, 110)
filledPolygon.addPoint(450, 90)
g.drawPolygon(filledPolygon)
break
case 3:
g.drawRect( 200, 50, 80, 60)
break
case 4:
g.drawOval(100, 50, 80, 60)
break
default:
g.fillArc(0, 60, 80, 60, 30, 120)
break
}
}
/*
* public void paint(Graphics g) { g.fillArc( 0, 60, 80, 60, 30, 120)
* //绘制扇形 g.drawOval( 100, 50, 80, 60)g.drawRect( 200, 50, 80, 60)
* g.drawOval( 300, 50, 60, 60)Polygon filledPolygon=new Polygon()
* filledPolygon.addPoint(380,50)filledPolygon.addPoint(380,110)
* filledPolygon.addPoint(450,90)g.drawPolygon(filledPolygon)}
*/
}
下面是我以前做的小程序,希望能给你点帮助!package menu
import java.awt.*
import java.awt.event.*
import javax.swing.*
public class DaYin extends JFrame implements ActionListener{
public DaYin() {
Container c=this.getContentPane()
c.setLayout(new BorderLayout())
JMenuBar jmb=new JMenuBar()
JMenu jm=null
jm=new JMenu("文件")
jmb.add(jm)
jm=new JMenu("编辑")
jmb.add(jm)
jm=new JMenu("打印")
JMenuItem jmi=new JMenuItem("打印预览")
jmi.addActionListener(this)
jm.add(jmi)
jmb.add(jm)
jm=new JMenu("帮助")
jmb.add(jm)
this.setJMenuBar(jmb)
this.setSize(1024,768)
this.setVisible(true)
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0)
}
})
}
public static void main(String[] args) {
new DaYin()
}
public void update(Graphics g){
g.setColor(Color.black)
String title[]={"摘要","科目","子目或户名","借方金额","贷方金额"}
String danwei[]={"千","百","十","万","千","百","十","元","角","分"}
int csx=200//打印x的初始坐标
int csy=200//打印y的初始坐标
int x=csx
int y=csy
int a=x+20//打印字体x的初始坐标
int b=y+20//打印字体y的初始坐标
int row=7//一共打印出几条横线
int cul=5//一共打印出几条竖线
int hangju=30//线与线之间的纵向间距
int lieju=100//线与线之间的横向间距
int yy=hangju*row+y
int c=yy+20
g.setFont(new Font("行楷",Font.TYPE1_FONT,24))
g.drawString("记 账 凭 证", x+160, y-40)//打印出记账凭证这几个字
g.drawLine(x+100, y-30, x+340, y-30)//打印出记账凭证下面的那条线
g.setFont(new Font("行楷",Font.TYPE1_FONT,13))
g.drawString("年 月 日 第_______号", x+260, y-10)
//g.drawLine(x+430, y-10, x+470, y-10)
for(int i=0i<=rowi++){
g.drawLine(x, y, cul*lieju+x+25, y)//此循环用于画出表格的行
if(i==0)
y+=hangju*2
else
y+=hangju
}
y=csy
g.drawLine(x+lieju*3, y+hangju, cul*lieju+x, y+hangju)//打印出第一行半的横线
for(int j=0j<=culj++){
g.drawLine(x, y, x, row*hangju+y)//此循环用于画出表格的列
x+=lieju
}
x=csx
for(int z=0z<culz++){
g.setColor(Color.red)//设置颜色
g.setFont(new Font("",Font.TYPE1_FONT,13))//设置表头字体
if(z<3)
g.drawString(title[z], a, b+hangju/2)
else
g.drawString(title[z], a, b)//为表格添加表头
a+=lieju
}//76-89打印出一个表格形状
int xx=lieju*3+x+10
for(int v=0v<=9v++){
g.drawLine(xx, y+hangju, xx, row*hangju+y+hangju)//此循环用于画出表格的列
g.setFont(new Font("",Font.TYPE1_FONT,11))
g.drawString(danwei[v], xx-10, y+hangju+20)//为表格添加表头
if(v%2==0)
g.setColor(Color.red)//设置颜色
else
g.setColor(Color.BLUE)//设置颜色
xx+=10
}
for(int n=0n<9n++){
g.drawLine(xx, y+hangju, xx, row*hangju+y+hangju)//此循环用于画出表格的列
g.drawString(danwei[n],xx-10, y+hangju+20)//为表格添加表头
if(n%2==0)
g.setColor(Color.red)//设置颜色
else
g.setColor(Color.BLUE)//设置颜色
xx+=10
}
g.drawString(danwei[9],xx-10, y+hangju+20)
g.setColor(Color.black)//设置颜色
for(int i=0i<=1i++){
g.drawLine(x,yy , cul*lieju+x, yy)//此循环用于画出表格的行
yy+=hangju
}
yy=hangju*row+y
for(int j=0j<=3j++){
g.drawLine(x, yy, x, (row+1)*hangju+y)//此循环用于画出表格的列
if(j>0){
x+=lieju
}else{
x+=lieju*3
}
}//112-128打印出表格的最后一行单元格
x=csx
g.setFont(new Font("",Font.TYPE1_FONT,13))
g.drawString("合 计",x+60, c)
g.drawString("会计主管 记账 出纳 审核 制证", x+30, yy+50)
g.drawLine(cul*lieju+x+25, y, cul*lieju+x+25, (row+1)*hangju+y)//打印出最后一列
g.drawString("记",cul*lieju+x+6, y+15)
g.drawString("账", cul*lieju+x+6, y+35)
g.drawString("√", cul*lieju+x+6, y+55)//134-136为最后一列写入字体
g.drawString("附",cul*lieju+x+35, y+75)
g.drawString("件", cul*lieju+x+35, y+95)
g.drawString("张", cul*lieju+x+35, y+175)//134-136为最后一列后写入字体
}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand().equals("打印预览")){
this.repaint()
}
}
}
使用drawLine()做了一个记账凭证。
执行点击"打印"子菜单"打印预览"就可显示出我们所画的"记账凭证表"
希望这个小程序能够给你点灵感
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)