如何在Java中使用Panel,Frame等来显示图形?

时间:2011-12-10 17:17:15

标签: java swing graphics charts visualization

注意:我以前从未使用过摇摆,也没有图形2D,而且我的编程也不多......

我要做的是制作一个以数组/向量为输入的程序。这个数组,其中每个索引0,1,2等都保持零或一(int) - 在分0,1,2等中表示“无活动”或“活动”......

我希望程序绘制一条不连续的直线水平线 - 表示“活动”与“无活动”作为时间的函数 - 基于作为输入的数组。 当我运行代码时,这应该会弹出一个面板。 想法是将活动/没有活动显示为时间的函数,因此该线最好以图表(x轴和y轴)显示......并且这些不连续线中的几条将在彼此之上 - 用于比较不同的案例。

我已经尝试了一段时间来查看使用swing和2D的示例,但由于我的时间非常有限 - 我真的需要一些帮助..

任何代码:

  • 创建一个面板,框架等 - 我可以“轻松地”看到我可以在哪里插入我的图形:这是一个可以显示我将要制作的图形的面板
  • 基于如上所述的阵列绘制不连续水平线的图表

...非常感谢:)

从评论中添加:

抱歉 - 没有完成我的答案:)我可以肯定尝试学习如何在Swing框架,面板等中使用所有不同的东西。但是目前我的主要目标是完成我的学校作业 - 这是数据本身的可视化 - 他们并不真正关心你如何到达那里,最重要的是它可视化一些有用的东西......所以我认为如果我得到一些代码,我可以减少花在这上面的时间这可以让我开始 - 而不必先了解它是如何工作的。

2 个答案:

答案 0 :(得分:4)

无需了解Graphics2D,只需访问JFreeChart即可。这是一个简单的tutorial来帮助您入门(尽管需要最少的Java编程知识)

答案 1 :(得分:2)

这是一个例子,我想它会有所帮助

import java.awt.*;
import javax.swing.*;

public class ActivityGraph extends JFrame {

int[] active = {0,1,1,0,0,0,1,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1};
int length = 25, //basic length in pixels for drawing the lines
        offset = 50; //so the lines aren't sticked at the border

private ActivityGraph(String name, int x, int y, int width, int height) {
    super(name);
    setBounds(x, y, width, height);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    JPanel panel = new GraphPanel();
    //panel.setBounds(0, 0, 800, 400); not nessesary
    add(panel);
}

public static void main(String[] args) {
    new ActivityGraph("Activity Graph", 60, 60, 800, 400).setVisible(true);
}

private class GraphPanel extends JPanel {

    public void paint(Graphics g) {
        g.setColor(Color.white);
        g.fillRect(0, 0, 800, 400);
        //setting background (method setBackground() doesn't want to work for me)
        g.setColor(Color.black);
        for(int i = 0; i<active.length; i++) {
            if(active[i]==0) {
                g.drawLine(offset + i*length, offset + length, offset + i*length + length, offset + length);
            }
            else {
                g.drawLine(offset + i*length, offset, offset + i*length + length, offset);
            }
            /*
             * draw line from XY point to another XY point
             * notice that X = Y = 0 point is in left top corner
             * so higher Y values will mean "downer" points acctualy
             */
        }
    }

}

}

如果你愿意,我可以给你发送数学函数的图形抽屉(如窦,电源......)