Archiv für

Mai, 2006

...

Wird Java Open Source?

Kommentare deaktiviert

Gerade bei Heise gelesen:

So ließ der neue Sun-CEO, Jonathan Schwartz, in seiner Keynote durchblicken, dass das Unternehmen tatsächlich über die Freigabe der Programmiersprache Java als Open Source nachdenkt. Nach den Worten von Schwarz stelle sich eher die Frage nach dem “Wie” als nach dem “Ob”: “It’s not a question of whether we’ll open source Java, now the question is how.” Bei der Entwicklung der besten Strategie für ein solches Unterfangen wolle Sun auf jeden Fall eng mit der Community zusammenarbeiten.

Dann gibt’s ja vielleicht bald einen offiziellen Download für das SUN JDK/JRE bei Debian. :-)

Kommentare deaktiviert

JFreeChart: Spass mit Renderern

Kommentare deaktiviert

Gerade habe ich eine kleine Demo zusammengehackt, die einige der Funktionen von JFreeChart auf Renderer und Datasets testen soll. Sie ist noch nicht ganz fertig, aber man kann mittlerweile die Datasets neu füllen lassen und die Renderer umschalten. Das ganze soll irgendwann darauf hinauslaufen, dass man den Datasets beliebige Renderer zuweisen und so Liniendiagramme, Punktdiagramme und Liniendiagramme mit Punkten darstellen kann.

package test.jfreechart;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.DefaultXYItemRenderer;
import org.jfree.chart.renderer.xy.XYAreaRenderer;
import org.jfree.chart.renderer.xy.XYBarRenderer;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

public class CombinedChartsDemo
{
    private JFreeChart chart;
    private XYPlot plot;
    private XYSeries dataset1;
    private XYSeries dataset2;
    private XYSeries dataset3;

    public static void main(String[] args) {
        new CombinedChartsDemo(args);
    }
    
    public CombinedChartsDemo(String[] args) {
        plot = new XYPlot();
        plot.setDomainAxis(new NumberAxis("DOMAIN"));
        plot.setRangeAxis(new NumberAxis("RANGE"));
        chart = new JFreeChart(plot);
        
        dataset1 = new XYSeries("Data #1");
        fill(dataset1);
        
        dataset2 = new XYSeries("Data #2");
        fill(dataset2);
        
        dataset3 = new XYSeries("Data #3");
        fill(dataset3);
        
        plot.setDataset(0, new XYSeriesCollection(dataset1));
        plot.setDataset(1, new XYSeriesCollection(dataset2));
        plot.setDataset(2, new XYSeriesCollection(dataset3));
        plot.setRenderer(0, new DefaultXYItemRenderer());
        plot.setRenderer(1, new XYBarRenderer());
        plot.setRenderer(2, new XYAreaRenderer());
        
        JFrame frame = new JFrame("CombinedChartDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        frame.getContentPane().setLayout(new BorderLayout());
        frame.getContentPane().add(new ChartPanel(chart), BorderLayout.CENTER);
        
        JPanel panel = new JPanel(new FlowLayout());
        JButton bRotateRenderer = new JButton("Rotate Renderers");
        bRotateRenderer.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e)
            {
                XYItemRenderer renderer;
                
                renderer = plot.getRenderer(2);
                plot.setRenderer(2, plot.getRenderer(1));
                plot.setRenderer(1, plot.getRenderer(0));
                plot.setRenderer(0, renderer);
            }});
        panel.add(bRotateRenderer);
        JButton bGenerateNew = new JButton("New Data");
        bGenerateNew.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e)
            {
                dataset1.clear();
                fill(dataset1);
                dataset2.clear();
                fill(dataset2);
                dataset3.clear();
                fill(dataset3);
            }});
        panel.add(bGenerateNew);
        frame.getContentPane().add(panel, BorderLayout.SOUTH);
        
        frame.setBounds(50, 50, 400, 400);
        frame.setVisible(true);
    }

    /**
     * Fills the dataset with new random data.
     * 
     * @param dataset12
     */
    private void fill(XYSeries dataset)
    {
        dataset.add(1.0, Math.random() * 30);
        dataset.add(5.0, Math.random() * 30);
        dataset.add(4.0, Math.random() * 30);
        dataset.add(12.5, Math.random() * 30);
        dataset.add(17.3, Math.random() * 30);
        dataset.add(21.2, Math.random() * 30);
        dataset.add(21.9, Math.random() * 30);
        dataset.add(25.6, Math.random() * 30);
        dataset.add(30.0, Math.random() * 30);
    }
}

Kommentare deaktiviert