如何在已经定义的JPanel绘制曲线

cheng409 2007-06-20 05:31:37
我要做班级成绩测评,要绘制成绩的分布曲线, 怎么把曲线加入到JPanel中啊 请大虾帮忙!
...全文
248 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Geek618 2007-06-24
  • 打赏
  • 举报
回复
这个程序有点问题(用了Scanner这个类的原因),输入完最后一个坐标后,一定要打个回车!!
Geek618 2007-06-24
  • 打赏
  • 举报
回复
//不知你还需要不?这里帮你写了个程序输入坐标是请用这种形式:如:(12,31),然后一排下来

package com.yao;

import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Point2D;
import java.util.*;
import java.util.List;
import java.util.regex.MatchResult;

/**
* @author *
*/
public class MainFrame extends JFrame {

/**
* @param args
*/
private static final int WIDTH=600;
private static final int HEIGHT=600;
public DisplayPane drawingPanel;
public JPanel textPanel;
public JTextArea input;
public JTextField display;
protected String string;
public MainFrame(){
final Container cp=getContentPane();
cp.setLayout(null);
textPanel=new JPanel();
textPanel.setLayout(new BorderLayout());
textPanel.setBorder(new TitledBorder(new SoftBevelBorder(15,Color.RED,Color.GREEN),"请输入坐标"));

JLabel displayMessage=new JLabel("请输入坐标:");

input=new JTextArea();
input.setBackground(Color.cyan);


textPanel.add(displayMessage,BorderLayout.NORTH);
textPanel.add(input,BorderLayout.CENTER);

JButton certain=new JButton("OK");
certain.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
Scanner scanner=new Scanner(input.getText());
List<Point2D.Double> coordList=new ArrayList<Point2D.Double>();

while(scanner.hasNextLine()){
String line=scanner.findInLine("(\\(\\d+,\\d+\\))");
if(line!=null){
MatchResult result=scanner.match();
coordList.add(getPoint(result.group(1)));
scanner.nextLine();

}

}
/*for(Point2D.Double point:coordList){

System.out.println("point.x"+point.x+"point.y"+point.y);

}*/
if(coordList!=null){
drawingPanel.getList(coordList);
repaint();
}


}
});

textPanel.setBounds(505,0,100,450);
certain.setBounds(522,470,80,60);

drawingPanel=new DisplayPane();
drawingPanel.setPreferredSize(new Dimension(500,500));

drawingPanel.setBounds(0,0,500,500);


cp.add(drawingPanel);
cp.add(textPanel);
cp.add(certain);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(WIDTH,HEIGHT);
setVisible(true);
}
public String getUserInput(){
return string;
}
public Point2D.Double getPoint(String string){
String pattern="(\\d+),(\\d+)";
Scanner scanner=new Scanner(string);
Point2D.Double point=new Point2D.Double();
String line=scanner.findInLine(pattern);
if(line!=null){
MatchResult result=scanner.match();
point.x=Double.parseDouble(result.group(1));
point.y=Double.parseDouble(result.group(2));

}
return point;


}
public static void main(String[] args) {
// TODO 自动生成方法存根
new MainFrame();
}


}

/**
*
*/
package com.yao;

import java.awt.geom.*;
import java.util.List;
import java.awt.*;
import javax.swing.JPanel;

/**
* @author *
*/
public class DisplayPane extends JPanel {


List<Point2D.Double> list;


public DisplayPane() {
super();

}

public synchronized void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;


g2.setPaint(new GradientPaint(0,0,new Color(150,0,0),getWidth(),getHeight(),new Color(100,100,255)));
g2.fillRect(0, 0, getWidth(), getHeight());

g2.translate(50, 50);
g2.setColor(Color.WHITE);
g2.setStroke(new BasicStroke(2.0f));
g2.draw(new Line2D.Double(0,0,getWidth(),0));
g2.draw(new Line2D.Double(0,0,0,getHeight()));
if(list!=null){
g2.setColor(Color.YELLOW);
Point2D.Double point1,point2;
point1=list.get(0);
for(int i=1;i<list.size();i++){
point2=list.get(i);
g2.draw(new Line2D.Double(point1,point2));
point1=point2;
}
}
}
public void getList(List<Point2D.Double> list){
this.list=list;

}

}



//做的粗糙了点!第一个程序负责从JTextArea中读取坐标并解析为x,y坐标赋给point,
//然后再把point放到列表中,并把此列表通过调用第二个程序中的getList()赋给第二程序中
//的list,然后第二个程序根据这些点绘图!!
boby 2007-06-20
  • 打赏
  • 举报
回复
可以先获得JPanel的Graphics,再画图

JPanel panel = new JPanel();
......
Graphics g = panel.getGraphics();
g.drawLine(...);
......

不过我认为扩展一个JPanel,然后处理他的paint()好些

62,616

社区成员

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

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