Zastanawia mnie, czy program w java może być jednocześnie appletem i aplikacją? Na razie mam aplikację. Nie wiem czy polecenie zostało dobrze zrozumiane przeze mnie.
Czy ktoś pomógłby przerobić ten kod? Wydaje mi się, że trzeba dodać extends Applet ale co zrobić z extends JFrame?
Mój kod:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
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.io.File;
import java.io.IOException;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
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.ChartPanel;
import org.jfree.chart.ChartUtilities;
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 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;
JFreeChart w;
double d=20;
double a=1;
double pi=3.14;
int N=1;
double L=100;
double lambda=380;
double k=0.01745;
double xx=0, yy=0;
double s1=0,s2=0,s3=0,M=0;
XYSeries series = new XYSeries("XYGraph");
JLabel lblChart = new JLabel();
JFileChooser fc;
public Pro() throws HeadlessException {
super();
setTitle("Dyfrakcja i interferencja");
setSize(900,600);
setResizable(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
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);
pleft.repaint();
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);
series.clear();
pleft.repaint();
pleft.revalidate();
}
if(source==saveItem){
// Zapisywanie wykresu do pliku JPG:
fc=new JFileChooser();
int retVal=fc.showSaveDialog(this);
if(retVal==JFileChooser.APPROVE_OPTION) {
File file=fc.getSelectedFile();
try {
ChartUtilities.saveChartAsJPEG(new File(file.getAbsolutePath()), w, 800, 600);
}
catch (IOException ex) {
JOptionPane.showMessageDialog(this, "Błąd.");
System.exit(4);
}
}
}
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");
}
}
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()+" [centymetrow]");
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;
pleft.repaint();
pleft.revalidate();
}
if(e.getSource()==sc2){
e2.setText("Stala siatki: "+i+" [mikrometrow]");
d=i;
pleft.repaint();
pleft.revalidate();
}
if(e.getSource()==sc3){
e3.setText("Szerokosc szczelin: "+i+" [mikrometrow]");
a=i;
pleft.repaint();
pleft.revalidate();
}
if(e.getSource()==sc4){
e4.setText("Ilosc szczelin: "+i);
N=i;
pleft.repaint();
pleft.revalidate();
}
if(e.getSource()==sc5){
e5.setText("Odległosc siatki od ekranu: "+i+" [centymetrow]");
L=i;
pleft.repaint();
pleft.revalidate();
}
}
class PanelDoRysowania extends JPanel
{
public PanelDoRysowania()
{}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Container cp = getContentPane();
series.clear();
for(int m=-200;m<201;m++){
if(m==0){
xx=0;
int n=m-1;
int p=m-2;
double y1, y2;
s1=Math.sin(k*pi*N*n);
s2=Math.sin(k*pi*a*n/d);
s3=Math.sin(k*pi*n);
M=pi*a*n/d;
y1=s1*s1*s2*s2/(M*M*s3*s3);
s1=Math.sin(k*pi*N*p);
s2=Math.sin(k*pi*a*p/d);
s3=Math.sin(k*pi*p);
M=pi*a*p/d;
y2=s1*s1*s2*s2/(M*M*s3*s3);
yy=y1+(y1-y2)/3;
series.add(xx, yy);
}
else{
xx=m*lambda*L/(100000*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(
"", "", "Natezenie", dataset,
PlotOrientation.VERTICAL, false, false, false);
ChartPanel chartPanel = new ChartPanel(w);
chartPanel.setPreferredSize(new java.awt.Dimension(300, 200));
cp.add(chartPanel);
}
}
}