W programie chodzi o to, żeby wyświetlał odpowiedni wykres w zależności od ustawienia JScrollBarów. Moje główne pytanie brzmi jak zrobić, żeby ten właśnie wykres zmieniał się na bieżąco ze zmianą wartości dla JScroolBarów? Poza tym nie potrzebuję oznaczeń na osiach, stąd drugie pytanie jak je usunąć?
W programie panuje trochę chaosu za co z góry przepraszam.
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.GridLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRootPane;
import javax.swing.JScrollBar;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
public class Pro extends JFrame implements WindowListener, ActionListener, AdjustmentListener{
JMenuItem newItem=new JMenuItem("New"), saveItem=new JMenuItem("Save"), exitItem=new JMenuItem("Exit");
JMenuItem infoItem=new JMenuItem("O zjawisku"), autorItem=new JMenuItem("O autorach");
JPanel pright;
PanelDoRysowania pleft;
JScrollBar sc1, sc2, sc3, sc4, sc5;
JLabel e, e1, e2, e3, e4, e5;
BufferedImage image;
Graphics2D g2im;
JLabel wykres;
XYSeries series;
XYSeriesCollection seriescollection;
JFreeChart jfreechart;
boolean draw = false;
double x = 0, poczatek, koniec;
int time = 0;
JFreeChart w;
double d=0.00002;
double a=0.000001;
double pi=3.14;
int N=1;
double L=100;
double lambda=0.00000038;
double k=0.01745;
double xx=0, yy=0;
double s1=0,s2=0,s3=0,M=0;
public Pro() throws HeadlessException {
super();
setTitle("Dyfrakcja i interferencja");
setSize(900,600);
setResizable(true);
JMenuBar menuBar=new JMenuBar();
JMenu fileMenu=new JMenu("File"), infoMenu=new JMenu("Info");
menuBar.add(fileMenu);
menuBar.add(infoMenu);
fileMenu.add(newItem);
fileMenu.add(saveItem);
fileMenu.add(exitItem);
infoMenu.add(infoItem);
infoMenu.add(autorItem);
JRootPane root=getRootPane();
root.setJMenuBar(menuBar);
setLayout(new BorderLayout());
pleft=new PanelDoRysowania();
pright=new JPanel();
pright=doPanel();
add(pleft, BorderLayout.WEST);
add(pright, BorderLayout.EAST);
newItem.addActionListener(this);
saveItem.addActionListener(this);
exitItem.addActionListener(this);
infoItem.addActionListener(this);
autorItem.addActionListener(this);
setVisible(true);
}
public Pro(GraphicsConfiguration arg0) {
super(arg0);
// TODO Auto-generated constructor stub
}
public Pro(String arg0) throws HeadlessException {
super(arg0);
// TODO Auto-generated constructor stub
}
public Pro(String arg0, GraphicsConfiguration arg1) {
super(arg0, arg1);
// TODO Auto-generated constructor stub
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
Object source=e.getSource();
if(source==newItem){
sc1.setValue(380);
sc2.setValue(20);
sc3.setValue(1);
sc4.setValue(1);
sc5.setValue(100);
}
if(source==saveItem){
try {
ImageIO.write( image, "jpeg", new File ( "im.jpg" ) );
}
catch (IOException e1) {
e1.printStackTrace();
System.out.println("Blad przy zapisywaniu obrazku do pliku");
System.exit(1);
}
JOptionPane.showMessageDialog(this,"Zapisano jako:\n im.jpg");
}
if(source==exitItem){
System.exit(0);
}
if(source==infoItem){
Okno okno = new Okno();
okno.setVisible(true);
}
if(source==autorItem){
JOptionPane.showMessageDialog(this,"Autorki:\n Katarzyna Mazur\n Magdalena Owerko");
}
}
@Override
public void windowActivated(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowClosed(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowClosing(WindowEvent arg0) {
// TODO Auto-generated method stub
System.exit(0);
}
@Override
public void windowDeactivated(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowDeiconified(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowIconified(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowOpened(WindowEvent arg0) {
// TODO Auto-generated method stub
}
public JPanel doPanel()
{
JPanel panel=new JPanel();
ImageIcon obrazek = new ImageIcon("tecza.jpg");
panel.setSize(350,600);
sc1=new JScrollBar(JScrollBar.HORIZONTAL, 380, 10, 380, 770);
sc2=new JScrollBar(JScrollBar.HORIZONTAL,20,1,20,41);
sc3=new JScrollBar(JScrollBar.HORIZONTAL,1,1,1,11);
sc4=new JScrollBar(JScrollBar.HORIZONTAL,1,1,1,11);
sc5=new JScrollBar(JScrollBar.HORIZONTAL,100,10,100,210);
sc1.setPreferredSize(new Dimension(300,10));
sc2.setPreferredSize(new Dimension(300,10));
sc3.setPreferredSize(new Dimension(300,10));
sc4.setPreferredSize(new Dimension(300,10));
sc5.setPreferredSize(new Dimension(300,10));
sc1.addAdjustmentListener(this);
sc2.addAdjustmentListener(this);
sc3.addAdjustmentListener(this);
sc4.addAdjustmentListener(this);
sc5.addAdjustmentListener(this);
e=new JLabel("Opcje:");
e1=new JLabel("Dlugosc fali: "+sc1.getMinimum()+" [nanometrow]");
e2=new JLabel("Stala siatki: "+sc2.getMinimum()+" [mikrometrow]");
e3=new JLabel("Szerokosc szczelin: "+sc3.getMinimum()+" [mikrometrow]");
e4=new JLabel("Ilosc szczelin: "+sc4.getMinimum());
e5=new JLabel("Odległosc siatki od ekranu: "+sc5.getMinimum()+" [metrow]");
panel.setLayout(new GridLayout(12,1));
panel.add(e);
JLabel etykieta2 = new JLabel();
etykieta2.setIcon(obrazek);
panel.add(etykieta2);
panel.add(sc1);
panel.add(e1);
panel.add(sc2);
panel.add(e2);
panel.add(sc3);
panel.add(e3);
panel.add(sc4);
panel.add(e4);
panel.add(sc5);
panel.add(e5);
return panel;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Pro a=new Pro();
}
@Override
public void adjustmentValueChanged(AdjustmentEvent e) {
// TODO Auto-generated method stub
int i =e.getValue();
if(e.getSource()==sc1){
e1.setText("Dlugosc fali: "+i+" [nanometrow]");
lambda=i;
}
if(e.getSource()==sc2){
e2.setText("Stala siatki: "+i+" [mikrometrow]");
d=i;
}
if(e.getSource()==sc3){
e3.setText("Szerokosc szczelin: "+i+" [mikrometrow]");
a=i;
}
if(e.getSource()==sc4){
e4.setText("Ilosc szczelin: "+i);
N=i;
}
if(e.getSource()==sc5){
e5.setText("Odległosc siatki od ekranu: "+i+" [centymetrow]");
L=i;
}
}
class PanelDoRysowania extends JPanel implements ActionListener
{
public PanelDoRysowania()
{
XYSeries series = new XYSeries("XYGraph");
for(int m=-300;m<301;m++){
xx=m*a*L/(100*d);
s1=Math.sin(k*pi*N*m);
s2=Math.sin(k*pi*a*m/d);
s3=Math.sin(k*pi*m);
M=pi*a*m/d;
yy=s1*s1*s2*s2/(M*M*s3*s3);
series.add(xx, yy);
}
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series);
w=ChartFactory.createXYLineChart("", "", "", dataset,PlotOrientation.VERTICAL, false, false, false);
// Dodawanie wykresu jako obraz - klasa BufferedImage
BufferedImage image = w.createBufferedImage(500,200);
JLabel lblChart = new JLabel();
lblChart.setIcon(new ImageIcon(image));
add(lblChart);
}
public void run() {
// TODO Auto-generated method stub
}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
}
}}