Ich habe vor kurzem begonnen, JFreeChart zu verwenden, und es gibt etwas, das ich tun möchte, aber ich bin nicht sicher, ob es möglich ist. Mein Programm soll ein Spektrogramm (eine Soundgrafik) aus einer WAV-Datei zeichnen. So habe ich es geschafft, die Daten aus meiner WAV-Datei in einer Doppel-Arrayliste zu bekommen und in einem Diagramm darzustellen. Aber jetzt möchte ich in der Lage sein, einen Bereich meines Spektrogramms (mit dem gleichen Werkzeug zum Zoomen) ohne Zoomen zu wählen und nur den ausgewählten Teil meines Sounds abspielen zu können. Aber ich kann einfach keinen Weg zum Erfolg finden. Hier ist mein Code meiner Grafik:JFreeChart wählen Sie einen Bereich ohne zu zoomen
package classes;
import java.awt.Color;
import java.awt.Paint;
import java.awt.Rectangle;
import java.io.File;
import java.io.IOException;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.Plot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.RectangleInsets;
public class Chart{
JFreeChart chart;
Plot plot;
//Constructeur de la classe Chart
public Chart(double[][] bs, int channel, int framesLength, float frameRate)
{
// Création d'un XY chart
XYSeries series = new XYSeries("XYGraph");
int i=0,j=0;
float k=0;
//Ajout de tous les points du tableau de 16 bytes dans le chart
for(i=0; i <channel;i++)
{
for(j=0; j< framesLength;j++)
{
//Division des valeurs par 2^15 pour être entre 1 et -1
series.add(k, (bs[i][j]/32768));
//Echelle de X
k+=(1/frameRate);
}
}
// Ajoute la série au dataset
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series);
// Génération du graphe
chart = ChartFactory.createXYLineChart(
"Ajouter titre à la fonction de génération", // Titre
"Temps (s)", // Nom de l'axe X
"y-axis", // Nom de l'axe Y
dataset, // Dataset
PlotOrientation.VERTICAL, // Plot Orientation
true, // Show Legend
false, // Use tooltips
false // Configure chart to generate URLs?
);
plot= (XYPlot) chart.getPlot();
}
//Renvoie le chart
public JFreeChart getChart()
{
return chart;
}
public void color(Color c)
{
plot.setBackgroundPaint(c);
}
}
Und hier ich das Diagramm Klasse bin aufrufen und verwenden es:
Chart chartUn= new Chart(bs, channels , frameLength , frameRate);
chartUn.color(Color.pink);
vue.setChartPanelUn(new ChartPanel(chartUn.getChart(), false));
vue.getChartPanelUn().setRangeZoomable(false);
vue.getChartPanelUn().setMouseWheelEnabled(true);
vue.getChartPanelUn() gibt einen ChartPanel. Würdest du eine Idee haben, wie ich mein Problem lösen kann? Vielen Dank (Und sorry, wenn mein Englisch ist nicht immer genau: /)
Danke für die schnelle Antwort! Ich werde es dieses Wochenende versuchen, um zu sehen, ob es mit meinem Code funktioniert – user2299206