在Applet输入数据,按下Button后在本页下方自动绘图,求救Applet和Gui高手

gengyigang 2007-12-21 05:41:30
且不说图形是什么?我能会出来,就是自定义了Paint()后,每次打开网页,就自动调用Paint(),覆盖了init()中的标签,文本等,怎样才能使Gui始终显示又在按下BUtton后会自动绘图呢?(快交作业了,跪求指导 )!!!
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

import javax.swing.JApplet;
public class AppletTwo extends JApplet implements ActionListener
{
int x=0,y=0,width=0,height=0,startAngle=0,atcAngle=0;
JLabel l1,l2,l3,l4,l5,l6;
JTextField t1,t2,t3,t4,t5,t6;
JButton b;
public void init()
{
l1=new JLabel("x");
l1.setBounds(0,0,50,50);
l2=new JLabel("y");
l2.setBounds(0,50,50,50);
l3=new JLabel("width");
l3.setBounds(150,0,100,50);
l4=new JLabel("height");
l4.setBounds(150,50,100,50);
l5=new JLabel("startAngle");
l5.setBounds(350,0,150,50);
l6=new JLabel("atcAngle");
l6.setBounds(350,50,150,50);
t1=new JTextField();
t1.setBounds(50,0,100,50);
t2=new JTextField();
t2.setBounds(50,50,100,50);
t3=new JTextField();
t3.setBounds(250,0,100,50);
t4=new JTextField();
t4.setBounds(250,50,100,50);
t5=new JTextField();
t5.setBounds(500,0,100,50);
t6=new JTextField();
t6.setBounds(500,50,100,50);
b=new JButton("绘制");
b.setBounds(620,50,180,50);
b.setActionCommand("play");
b.addActionListener(this);
getContentPane().add(l1);
getContentPane().add(l2);
getContentPane().add(l3);
getContentPane().add(l4);
getContentPane().add(l5);
getContentPane().add(l6);
getContentPane().add(t1);
getContentPane().add(t2);
getContentPane().add(t3);
getContentPane().add(t4);
getContentPane().add(t5);
getContentPane().add(t6);
getContentPane().add(b);
setVisible(true);
setLayout(null);
}
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand().equals("play"))
{
x=Integer.parseInt(t1.getText());
y=Integer.parseInt(t2.getText());
width=Integer.parseInt(t3.getText());
height=Integer.parseInt(t4.getText());
startAngle=Integer.parseInt(t5.getText());
atcAngle=Integer.parseInt(t6.getText());
repaint();
}
}
public void paint(Graphics g)
{
if(isOpaque)
{
g.drawRect(x,y,width-1,height-1);
g.drawLine(x,y,x+width,y+height);
g.drawLine(x+width,y,x,y+height);
g.drawLine((int)(x+width/2),y,(int)(x+width/2),y+height);
g.drawLine(x,(int)(y+height/2),x+width,(int)(y+height/2));
g.drawOval(x,y,width,height);
g.setColor(Color.black);
g.fillArc(x,y,width,height,startAngle,atcAngle);
}
}
}
...全文
120 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gengyigang 2007-12-22
  • 打赏
  • 举报
回复
谢谢二楼,一天我会给分,麻烦你能再教一下为什么要用super.paint(g);?
ltc_mouse 2007-12-22
  • 打赏
  • 举报
回复
我的理解是lz重载了paint()方法,而在paint方法中,只是进行了一些画线处理,并没有进行控件的绘图处理。使用super.paint方法,就是使用JApplet从Container那继承过来的paint方法,让容器中的每个组件都进行paint处理,从而达到绘制所有控件的目的。Java doc关于paint方法的使用,提到了如果重写paint方法,应该将super.paint作为第一条语句调用~ 不知道这样有没说清楚,我也刚学,很多东西是看JDK文档理解的,^_^
hanfengthinker 2007-12-22
  • 打赏
  • 举报
回复
先清屏现调repaint()吧
ltc_mouse 2007-12-21
  • 打赏
  • 举报
回复
帮你顶一下吧~ 我在Eclipse中运行了下,似乎没发现什么问题。
不过,在不输入数字的情况下按“绘制”按钮,有个异常。Integer.parseInt异常,从防错角度看,还是应该处理下的,确保所有数字都有输入情况下,才进行数字解析。

有种做法可以尝试下,就是在paint中首先调用默认处理绘制控件:

public void paint(Graphics g)
{
super.paint(g); //先进行默认绘制
...
}
gengyigang 2007-12-21
  • 打赏
  • 举报
回复
不好意思。刚才我把程序抄错了,正确的应该是
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

import javax.swing.JApplet;
public class AppletTwo extends JApplet implements ActionListener
{
int x=0,y=0,width=0,height=0,startAngle=0,atcAngle=0;
JLabel l1,l2,l3,l4,l5,l6;
JTextField t1,t2,t3,t4,t5,t6;
JButton b;
public void init()
{
l1=new JLabel("x");
l1.setBounds(0,0,50,50);
l2=new JLabel("y");
l2.setBounds(0,50,50,50);
l3=new JLabel("width");
l3.setBounds(150,0,100,50);
l4=new JLabel("height");
l4.setBounds(150,50,100,50);
l5=new JLabel("startAngle");
l5.setBounds(350,0,150,50);
l6=new JLabel("atcAngle");
l6.setBounds(350,50,150,50);
t1=new JTextField();
t1.setBounds(50,0,100,50);
t2=new JTextField();
t2.setBounds(50,50,100,50);
t3=new JTextField();
t3.setBounds(250,0,100,50);
t4=new JTextField();
t4.setBounds(250,50,100,50);
t5=new JTextField();
t5.setBounds(500,0,100,50);
t6=new JTextField();
t6.setBounds(500,50,100,50);
b=new JButton("绘制");
b.setBounds(620,50,180,50);
b.setActionCommand("play");
b.addActionListener(this);
getContentPane().add(l1);
getContentPane().add(l2);
getContentPane().add(l3);
getContentPane().add(l4);
getContentPane().add(l5);
getContentPane().add(l6);
getContentPane().add(t1);
getContentPane().add(t2);
getContentPane().add(t3);
getContentPane().add(t4);
getContentPane().add(t5);
getContentPane().add(t6);
getContentPane().add(b);
setVisible(true);
setLayout(null);
}
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand().equals("play"))
{
x=Integer.parseInt(t1.getText());
y=Integer.parseInt(t2.getText());
width=Integer.parseInt(t3.getText());
height=Integer.parseInt(t4.getText());
startAngle=Integer.parseInt(t5.getText());
atcAngle=Integer.parseInt(t6.getText());
repaint();
}
}
public void paint(Graphics g)
{
g.drawRect(x,y,width-1,height-1);
g.drawLine(x,y,x+width,y+height);
g.drawLine(x+width,y,x,y+height);
g.drawLine((int)(x+width/2),y,(int)(x+width/2),y+height);
g.drawLine(x,(int)(y+height/2),x+width,(int)(y+height/2));
g.drawOval(x,y,width,height);
g.setColor(Color.black);
g.fillArc(x,y,width,height,startAngle,atcAngle);
}
}

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧