一个JAVA程序,画一个三叶玫瑰线,再添加按钮来打开颜色选择器,自己写的代码无法成功实现,求大神帮忙。

开发环境为Netbeans,效果和图片差不多,只要将图形和按钮关联就好代码如下。importjava.awt.*;importjava.awt.event.*;impor... 开发环境为Netbeans,效果和图片差不多,只要将图形和按钮关联就好代码如下。import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.awt.Color;import java.awt.Graphics;import java.awt.event.ComponentEvent;import java.awt.event.ComponentListener;import java.util.ArrayList;import java.util.List;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;public class GraExp4 extendsJFrame{Container J;JButton btn=new JButton("选择颜色");Color color=new Color(200,200,200);public GraExp4() { J=getContentPane(); J.setLayout(new FlowLayout()); J.add(btn); btn.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ color=JColorChooser.showDialog(null,"请选择你喜欢的颜色",color); if (color==null) color=Color.lightGray;J.setBackground(color);J.repaint(); } });setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);setSize(newDimension(400,300)); show(); BB(); { add(J); setSize(450, 550);//设置窗口大小 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置一个默认的关闭操作,点击按钮时,退出程序。 setLocationRelativeTo(null); setVisible(true); this.validate(); JButton btn=new JButton("选择颜色"); Color color=new Color(200,200,200); }} public static void main(String[] args) { GraExp4 ge=new GraExp4(); new BB(); } private void BB() { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } private static class BB { public BB() { } }}class MyJPanel extends JPanel implements ComponentListener{ MyJPanel(){ this.setBackground(Color.BLACK); } int roses=3; @Override public void paint(Graphics g){ super.paint(g); int x0, y0; x0 = this.getWidth() / 2; y0 = this.getHeight() / 2; g.setColor(Color.RED); g.drawLine(x0, 0, x0, y0 * 2); g.drawLine(0, y0, x0 * 2, y0); List<Integer> listx=new ArrayList<Integer>(); List<Integer> listy=new ArrayList<Integer>(); for (int i = 0; i < 1024; i++) { double angle = i * Math.PI / 512; double radius = 200*Math.sin(roses * angle); int x = (int) Math.round(radius * Math.cos(angle)); int y = (int) Math.round(radius * Math.sin(angle)); listx.add(x0+x); listy.add(y0+y); } for (int i = 0; i < listx.size()-1; i++) { g.drawLine(listx.get(i),listy.get(i), listx.get(i+1), listy.get(i+1));//画点 } } @Override public void componentHidden(ComponentEvent arg0) {} @Override public void componentMoved(ComponentEvent arg0) {} @Override public void componentResized(ComponentEvent arg0) { repaint(); } @Override public void componentShown(ComponentEvent arg0) {}} 展开
 我来答
紫薇参星
科技发烧友

2016-06-12 · 有一些普通的科技小锦囊
知道大有可为答主
回答量:5983
采纳率:92%
帮助的人:3604万
展开全部

你的三叶玫瑰线程序我帮你改完了,你看看吧。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.ArrayList;
import java.util.List;
public class GraExp4 extends JFrame{
 Container J;
 JButton btn=new JButton("选择颜色");
 Color color=new Color(200,200,200);
 JPanel jp=new JPanel();
 MyJPanel mjp=new MyJPanel();
 public GraExp4()
 {
  super("三叶玫瑰线");
  J=getContentPane();
  jp.setBackground(Color.WHITE);
  jp.add(btn);
  J.add(jp,BorderLayout.NORTH);
  J.add(mjp,BorderLayout.CENTER);
  btn.addActionListener(new ActionListener(){ 
   public void actionPerformed(ActionEvent e)
   {
    color=JColorChooser.showDialog(null,"请选择你喜欢的颜色",color);
    if (color==null) color=Color.lightGray;
    mjp.setForeground(color);
    mjp.repaint(); 
   }
  });
  setSize(450, 550);//设置窗口大小
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置一个默认的关闭操作,点击按钮时,退出程序。
  setLocationRelativeTo(null);
  setVisible(true);
 }
 public static void main(String[] args)
 {
  GraExp4 ge=new GraExp4();
 }
 
 class MyJPanel extends JPanel implements ComponentListener{
  int roses=3;
  MyJPanel(){
   this.setBackground(Color.WHITE);
  }
  @Override
  public void paint(Graphics g){
   super.paint(g);
   int x0, y0; 
   x0 = this.getWidth() / 2; 
   y0 = this.getHeight() / 2; 
   g.setColor(Color.RED); 
   g.drawLine(x0, 0, x0, y0 * 2); 
   g.drawLine(0, y0, x0 * 2, y0); 
   List<Integer> listx=new ArrayList<Integer>();
   List<Integer> listy=new ArrayList<Integer>();
   g.setColor(color); 
   for(int j=0;j<200;j+=20)
    for (int i = 0; i < 1024; i++) { 
     double angle = i * Math.PI / 512; 
     double radius = j*Math.sin(roses * angle); 
     int x = (int) Math.round(radius * Math.cos(angle)); 
     int y = (int) Math.round(radius * Math.sin(angle));
     listx.add(x0+x);
     listy.add(y0+y);
    } 
   for (int i = 0; i < listx.size()-1; i++) {
    g.drawLine(listx.get(i),listy.get(i), listx.get(i+1), listy.get(i+1));
   }
  }
  @Override
  public void componentHidden(ComponentEvent arg0) {}
  @Override
  public void componentMoved(ComponentEvent arg0) {}
  @Override
  public void componentResized(ComponentEvent arg0) {
   repaint();
  }
  @Override
  public void componentShown(ComponentEvent arg0) {}
 }
}

运行结果:

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式