【问题标题】:Add DrawGraph on Panel instead on Frame在 Panel 上添加 DrawGraph 而不是在 Frame 上
【发布时间】:2020-08-14 20:17:00
【问题描述】:

我正在使用此设置绘制简单的折线图,然后将.add() 绘制在一个框架上。 我的问题是我想将.add() 放到一个面板中,以便我可以附加多个图表。

如何运行它?

JPanel myPanel = new JPanel();
DrawGraph graph1 = new DrawGraph(graph_scores);
myPanel.add(graph1);

下面是frame.add() 的代码。但我想要上面的panel.add()

public void start_graph()
{
    //Make random list of data
    List<Integer> scores = new ArrayList<Integer>();
    Random random = new Random();
    int maxDataPoints = 16;
    int maxScore = 20;
    for (int i = 0; i < maxDataPoints ; i++) {
       scores.add(random.nextInt(maxScore));
    }
    
    //This is the part where i want to change thanks!
    DrawGraph graph1 = new DrawGraph(graph_scores);
    JFrame frame1 = new JFrame("DrawGraph");
    frame1.getContentPane().add(graph1);
    frame1.pack();
    frame1.setLocationByPlatform(true);
    frame1.setVisible(true);
}

public class DrawGraph extends JPanel {
private final int MAX_SCORE = 20;
private final int PREF_W = 400;
private final int PREF_H = 200;
private final int BORDER_GAP = 10;
private final Color GRAPH_COLOR = Color.green;
private final Color GRAPH_POINT_COLOR = new Color(150, 50, 50, 180);
private final Stroke GRAPH_STROKE = new BasicStroke(3f);
private final int GRAPH_POINT_WIDTH = 12;
private final int Y_HATCH_CNT = 10;
private List<Integer> scores;

public DrawGraph(List<Integer> scores) {
    this.scores = scores;
}

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

    double xScale = ((double) getWidth() - 2 * BORDER_GAP) / (scores.size() - 1);
    double yScale = ((double) getHeight() - 2 * BORDER_GAP) / (MAX_SCORE - 1);

    List<Point> graphPoints = new ArrayList<Point>();
    for (int i = 0; i < scores.size(); i++) {
        int x1 = (int) (i * xScale + BORDER_GAP);
        int y1 = (int) ((MAX_SCORE - scores.get(i)) * yScale + BORDER_GAP);
        graphPoints.add(new Point(x1, y1));
    }

    // create x and y axes
    g2.drawLine(BORDER_GAP, getHeight() - BORDER_GAP, BORDER_GAP, BORDER_GAP);
    g2.drawLine(BORDER_GAP, getHeight() - BORDER_GAP, getWidth() - BORDER_GAP, getHeight() - BORDER_GAP);

    // create hatch marks for y axis.
    for (int i = 0; i < Y_HATCH_CNT; i++) {
        int x0 = BORDER_GAP;
        int x1 = GRAPH_POINT_WIDTH + BORDER_GAP;
        int y0 = getHeight() - (((i + 1) * (getHeight() - BORDER_GAP * 2)) / Y_HATCH_CNT + BORDER_GAP);
        int y1 = y0;
        g2.drawLine(x0, y0, x1, y1);
    }

    // and for x axis
    for (int i = 0; i < scores.size() - 1; i++) {
        int x0 = (i + 1) * (getWidth() - BORDER_GAP * 2) / (scores.size() - 1) + BORDER_GAP;
        int x1 = x0;
        int y0 = getHeight() - BORDER_GAP;
        int y1 = y0 - GRAPH_POINT_WIDTH;
        g2.drawLine(x0, y0, x1, y1);
    }

    Stroke oldStroke = g2.getStroke();
    g2.setColor(GRAPH_COLOR);
    g2.setStroke(GRAPH_STROKE);
    for (int i = 0; i < graphPoints.size() - 1; i++) {
        int x1 = graphPoints.get(i).x;
        int y1 = graphPoints.get(i).y;
        int x2 = graphPoints.get(i + 1).x;
        int y2 = graphPoints.get(i + 1).y;
        g2.drawLine(x1, y1, x2, y2);
    }

    g2.setStroke(oldStroke);
    g2.setColor(GRAPH_POINT_COLOR);
    for (int i = 0; i < graphPoints.size(); i++) {
        int x = graphPoints.get(i).x - GRAPH_POINT_WIDTH / 2;
        int y = graphPoints.get(i).y - GRAPH_POINT_WIDTH / 2;
        ;
        int ovalW = GRAPH_POINT_WIDTH;
        int ovalH = GRAPH_POINT_WIDTH;
        g2.fillOval(x, y, ovalW, ovalH);
    }
}

@Override
public Dimension getPreferredSize() {
    return new Dimension(PREF_W, PREF_H);
}
}

【问题讨论】:

    标签: java swing graphics jframe jpanel


    【解决方案1】:

    在这里我找到了 JFreeChart;用于制作图表,易于处理,可以轻松放置在JFrame或JPanel上

    【讨论】:

      猜你喜欢
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-06
      • 2011-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多