package org.paint;import java.awt.*;
import java.util.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;import javax.swing.*;
public class Paint extends JFrame implements ActionListener {
    private JRadioButton jradiobutton_round,jradiobutton_rectangle;
    private JLabel jlabel_width,jlabel_length,jlabel_cir,jlabel_area;
    private JTextField text_width,text_length,text_cir,text_area;
    private JButton button_paint;
    private JPanel jpanel1,jpanel2,jpanel3;
    private  RoundPaint roundpaint;
    public Paint()
    {
     super("绘制平面图形并计算周长和面积");
     Dimension dim =getToolkit().getScreenSize(); //获得分辨率
        this.setBounds(dim.width/4,dim.height/4,dim.width/2,dim.height/2);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setBackground(java.awt.Color.lightGray);
        
       jradiobutton_round =new JRadioButton("圆形");
       jradiobutton_rectangle = new JRadioButton("矩形");
       ButtonGroup bgp = new ButtonGroup();
       bgp.add(jradiobutton_round);
       bgp.add(jradiobutton_rectangle);
       jradiobutton_round.setSelected(true);
       jlabel_width = new JLabel("宽度");
       jlabel_length = new JLabel("长度");
       text_length = new JTextField(10);
       text_width = new JTextField(10);
       button_paint = new JButton("绘图");
       button_paint.addActionListener(this);
       jpanel1 = new JPanel();
       jpanel1.setLayout(new FlowLayout(FlowLayout.LEFT));
       jpanel1.add(jradiobutton_rectangle);
       jpanel1.add(jradiobutton_round);
       jpanel1.add(jlabel_length);
       jpanel1.add(text_length);
       jpanel1.add(jlabel_width);
       jpanel1.add(text_width);
       jpanel1.add(button_paint);
       
       roundpaint = new RoundPaint();
       //jpanel2 = new JPanel();
      // jpanel2.add(roundpaint);
      // jpanel2.add(new JLabel("rrr"));
       this.getContentPane().add(roundpaint,BorderLayout.CENTER);
       
       jlabel_cir = new JLabel("周长");
       text_cir = new JTextField(10);
       jlabel_area = new JLabel("面积");
       text_area = new JTextField(10);
       jpanel3 = new JPanel();
       jpanel3.setLayout(new FlowLayout(FlowLayout.CENTER));
       jpanel3.add(jlabel_cir);
       jpanel3.add(text_cir);
       jpanel3.add(jlabel_area);
     jpanel3.add(text_area);
     
     //this.getContentPane().setLayout(new BorderLayout());
       this.getContentPane().add(jpanel1,BorderLayout.NORTH);
       this.getContentPane().add(jpanel3,BorderLayout.SOUTH);
       this.setVisible(true);
       
       
    }

public void actionPerformed(ActionEvent arg0) {
double a,b,cir,area;
try{
a = Double.parseDouble(text_length.getText());
b = Double.parseDouble(text_width.getText());

if(jradiobutton_rectangle.isSelected())
{
cir = 2*(a+b);
area = a*b;
}
else
{
cir = Math.PI*(1.5*(a+b)-Math.sqrt(a*b));
area =a*b*Math.PI;
}
text_cir.setText(""+cir);
text_area.setText(""+area);
 roundpaint.repaint();
}
catch(Exception e)
{

}
finally
{

}

} public static void main(String[] args) {

    new Paint();
}
class RoundPaint extends Canvas implements ComponentListener
{
public RoundPaint()
{
this.addComponentListener(this);
}
public void  paint(Graphics g)
{   
try{


if(jradiobutton_round.isSelected())
g.fillRect(this.getWidth()/2, this.getHeight()/2,Integer.parseInt(text_width.getText()) , Integer.parseInt(text_length.getText()));
else
g.fillOval(this.getWidth()/2, this.getHeight()/2,Integer.parseInt(text_width.getText()) , Integer.parseInt(text_length.getText()));
}
catch(Exception e)
{

}
finally
{

}
}
public void componentResized(ComponentEvent e)
{
this.repaint();
}
public void componentMoved(ComponentEvent e){}
public void componentShown(ComponentEvent e){}
public void componentHidden(ComponentEvent e){}



}}
这个该怎么改??

解决方案 »

  1.   

    可以显示,你把矩形与圆形搞反了。
    你把Canvas这个画布放到JFrame中间就可以,或者改paint矩形圆形的尺寸!
      

  2.   

    它是有个JRadioButton 控件  选择矩形就画矩形,选择圆就画圆  我是把Canvas这个画布放到JFrame中间 你说的我听的不是很懂,麻烦可以帮我改下代码吗??
      

  3.   

    试过能编译过,执行不了找找有几个Public修饰的类?
      

  4.   

    第一 楼主这个是可以画图的第二有可能你没有看到 那就改下面这两个地方
     if(jradiobutton_round.isSelected())
     g.fillRect(0, 0,Integer.parseInt(text_width.getText()) , Integer.parseInt(text_length.getText()));
     else
     g.fillOval(0,0,Integer.parseInt(text_width.getText()) , Integer.parseInt(text_length.getText()));
     }
      

  5.   

    那请问一些如果要使图形居屏幕中央  
    g.fillRect(0, 0,Integer.parseInt(text_width.getText()) , Integer.parseInt(text_length.getText()));
    这个该怎么设置??
      

  6.   

    这个知己写费劲.把你的Canvas 底下整个panel