dota2饰品替换:java问题求救,请大哥大姐看一下错在哪,帮我改一下

来源:百度文库 编辑:高校问答 时间:2024/04/28 19:47:54
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

//圆形类
class Oval extends JPanel {
public Oval(){
}
// public void paint(Graphics g){
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawOval(50,10,50,50);
}
}

//三角形类
class Poly extends JPanel {
int x[]={50,20,80};
int y[]={10,40,40};
public Poly(){
}
//public void paint(Graphics g){
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawPolygon(x,y,3);
}
}

//矩形类
class Rect extends JPanel {
public Rect(){
}
//public void paint(Graphics g){
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawRect(50,10,50,50);
}
}

class Dra extends JFrame implements ActionListener{
Button btnOv,btnPo,btnRe;
JPanel p,p1;
Oval ov;
Poly po;
Rect re;
public Dra(String tile){
super(tile);
p = new JPanel();
p.setLayout(new GridLayout(1,3,1,1));
btnOv = new Button("圆形");
btnOv.addActionListener(this);
btnPo = new Button("三角形");
btnPo.addActionListener(this);
btnRe = new Button("矩形");
btnRe.addActionListener(this);
p.add(btnOv);
p.add(btnPo);
p.add(btnRe);
//add(p,BorderLayout.NORTH);
setSize(200,200);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent event){
System.exit(0);}});
}
public void actionPerformed(ActionEvent e){
p1 = new JPanel();
p1.setLayout(new GridLayout(3,3,1,1));
if(e.getSource() == btnOv){
ov = new Oval();
p1.add(ov);
//repaint();
// add(p1,BorderLayout.CENTER);
show();
}
else if(e.getSource() == btnPo){
// p1.setLayout(new GridLayout(3,3,1,1));
po = new Poly();
//add(po,BorderLayout.SOUTH);
//repaint();
p1.add(po);
show();
}
else if(e.getSource() == btnRe){
re = new Rect();
p1.add(re);
//repaint();
// add(p1,BorderLayout.CENTER);
show();
}
// repaint();
// show();
add(p1,BorderLayout.CENTER);
setBounds(200,200,300,300);
show();
}
}
class Draw {
public static void main(String[] args){
Dra dr = new Dra("画图");
dr.show();
}
}

关键错误! 出在你没有把JPanel加入到JFrame的内容面板ContentPane中

我做了些改动 就可以了: (Dra类 改动的地方加了注释)

class Dra extends JFrame implements ActionListener{
Button btnOv,btnPo,btnRe;
JPanel p,p1;
Oval ov;
Poly po;
Rect re;
Container contentPane;//增加代码JFrame的内容面板
public Dra(String tile){
super(tile);
contentPane=this.getContentPane();//增加代码contentPane初始化
p = new JPanel();
p.setLayout(new GridLayout(1,3,1,1));
p1 = new JPanel();//增加代码p1 的初始化
p1.setLayout(new GridLayout(3,3,1,1)); //设置布局管理器
btnOv = new Button("圆形");
btnOv.addActionListener(this);
btnPo = new Button("三角形");
btnPo.addActionListener(this);
btnRe = new Button("矩形");
btnRe.addActionListener(this);
p.add(btnOv);
p.add(btnPo);
p.add(btnRe);
contentPane.add(p,BorderLayout.SOUTH);//增加代码加入组件
contentPane.add(p1,BorderLayout.CENTER);//增加代码加入组件
//add(p,BorderLayout.NORTH);
setSize(200,200);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent event){
System.exit(0);}});
}
public void actionPerformed(ActionEvent e){

//在类中初始化p1(去除代码)
if(e.getSource() == btnOv){
ov = new Oval();
p1.add(ov);
//repaint();
// add(p1,BorderLayout.CENTER);
show();
}
else if(e.getSource() == btnPo){
// p1.setLayout(new GridLayout(3,3,1,1));
po = new Poly();
//add(po,BorderLayout.SOUTH);
//repaint();
p1.add(po);
show();
}
else if(e.getSource() == btnRe){
re = new Rect();
p1.add(re);
//repaint();
// add(p1,BorderLayout.CENTER);
show();
}
// repaint();
// show();
add(p1,BorderLayout.CENTER);
setBounds(200,200,300,300);
show();
}
}

出什么错了?