Compilator don't have any errors but after the program starts I see white window and when I do interactions with the elements I start to see the program created in apache netbeans:
package test;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class javaP extends JFrame {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
private static void createAndShowGUI() {
JFrame frame = new JFrame("TrigGraphsApp");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Tworzenie panelu wyboru funkcji
JPanel functionPanel = new JPanel();
JLabel functionLabel = new JLabel("Funkcja:");
String[] functions = { "sin", "cos", "tg", "ctg", "arcsin", "arccos", "arctg", "arcctg" };
JComboBox<String> functionComboBox = new JComboBox<>(functions);
functionPanel.add(functionLabel);
functionPanel.add(functionComboBox);
// Tworzenie panelu parametrów
JPanel parameterPanel = new JPanel();
JLabel amplitudeLabel = new JLabel("Amplituda:");
JTextField amplitudeTextField = new JTextField(10);
JLabel phaseShiftLabel = new JLabel("Przesunięcie fazowe:");
JTextField phaseShiftTextField = new JTextField(10);
parameterPanel.add(amplitudeLabel);
parameterPanel.add(amplitudeTextField);
parameterPanel.add(phaseShiftLabel);
parameterPanel.add(phaseShiftTextField);
// Tworzenie przycisku rysowania
JButton drawButton = new JButton("Rysuj");
drawButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String selectedFunction = (String) functionComboBox.getSelectedItem();
double amplitude = Double.parseDouble(amplitudeTextField.getText());
double phaseShift = Double.parseDouble(phaseShiftTextField.getText());
// Tworzenie panelu wykresu
GraphPanel graphPanel = new GraphPanel(selectedFunction, amplitude, phaseShift);
graphPanel.setPreferredSize(new Dimension(400, 300));
// Tworzenie okna wykresu
JFrame graphFrame = new JFrame(selectedFunction + " Graph");
graphFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
graphFrame.getContentPane().add(graphPanel);
graphFrame.pack();
graphFrame.setLocationRelativeTo(null);
graphFrame.setVisible(true);
}
});
// Dodawanie komponentów do głównego panelu
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());
mainPanel.add(functionPanel, BorderLayout.NORTH);
mainPanel.add(parameterPanel, BorderLayout.CENTER);
mainPanel.add(drawButton, BorderLayout.SOUTH);
// Dodawanie głównego panelu do ramki
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
class GraphPanel extends JPanel {
private String function;
private double amplitude;
private double phaseShift;
public GraphPanel(String function, double amplitude, double phaseShift) {
this.function = function;
this.amplitude = amplitude;
this.phaseShift = phaseShift;
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
int width = getWidth();
int height = getHeight();
g2d.setColor(Color.BLACK);
g2d.setStroke(new BasicStroke(2));
double xScale = width / (2 * Math.PI);
double yScale = height / (2 * amplitude);
double xOffset = width / 2;
double yOffset = height / 2;
double step = 0.01;
for (double x = -2 * Math.PI; x < 2 * Math.PI; x += step) {
double y;
switch (function) {
case "sin":
y = amplitude * Math.sin(x - phaseShift);
break;
case "cos":
y = amplitude * Math.cos(x - phaseShift);
break;
case "tg":
y = amplitude * Math.tan(x - phaseShift);
break;
case "ctg":
y = amplitude / Math.tan(x - phaseShift);
break;
case "arcsin":
y = amplitude * Math.asin(x - phaseShift);
break;
case "arccos":
y = amplitude * Math.acos(x - phaseShift);
break;
case "arctg":
y = amplitude * Math.atan(x - phaseShift);
break;
case "arcctg":
y = amplitude * (Math.PI / 2 - Math.atan(x - phaseShift));
break;
default:
y = 0;
}
int xPixel = (int) (x * xScale + xOffset);
int yPixel = (int) (-y * yScale + yOffset);
g2d.drawLine(xPixel, yPixel, xPixel, yPixel);
}
}
}
and this errors codes:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "this.wybranaFunkcja" is null
at dawca.App.drawFunkcjaPlot(App.java:122)
at dawca.App$5.paintComponent(App.java:78)
at java.desktop/javax.swing.JComponent.paint(JComponent.java:1074)
at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
at java.desktop/javax.swing.JComponent.paint(JComponent.java:1083)
at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
at java.desktop/javax.swing.JComponent.paint(JComponent.java:1083)
at java.desktop/javax.swing.JLayeredPane.paint(JLayeredPane.java:586)
at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
at java.desktop/javax.swing.JComponent.paintToOffscreen(JComponent.java:5271)
at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBufferedFPScales(RepaintManager.java:1707)
at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1616)
at java.desktop/javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1556)
at java.desktop/javax.swing.RepaintManager.paint(RepaintManager.java:1323)
at java.desktop/javax.swing.JComponent.paint(JComponent.java:1060)
at java.desktop/java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
at java.desktop/sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:75)
at java.desktop/sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:112)
at java.desktop/java.awt.Container.paint(Container.java:2003)
at java.desktop/java.awt.Window.paint(Window.java:3949)
at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:876)
at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:848)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:848)
at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:823)
at java.desktop/javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:772)
at java.desktop/javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1884)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:316)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "this.wybranaFunkcja" is null
at dawca.App.drawFunkcjaPlot(App.java:122)
at dawca.App$5.paintComponent(App.java:78)
at java.desktop/javax.swing.JComponent.paint(JComponent.java:1074)
at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
at java.desktop/javax.swing.JComponent.paint(JComponent.java:1083)
at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
at java.desktop/javax.swing.JComponent.paint(JComponent.java:1083)
at java.desktop/javax.swing.JLayeredPane.paint(JLayeredPane.java:586)
at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
at java.desktop/javax.swing.JComponent.paintToOffscreen(JComponent.java:5271)
at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBufferedFPScales(RepaintManager.java:1707)
at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1616)
at java.desktop/javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1556)
at java.desktop/javax.swing.RepaintManager.paint(RepaintManager.java:1323)
at java.desktop/javax.swing.JComponent.paint(JComponent.java:1060)
at java.desktop/java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
at java.desktop/sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:75)
at java.desktop/sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:112)
at java.desktop/java.awt.Container.paint(Container.java:2003)
at java.desktop/java.awt.Window.paint(Window.java:3949)
at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:876)
at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:848)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:848)
at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:823)
at java.desktop/javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:772)
at java.desktop/javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1884)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:316)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Program should generate graphic functions cos
, sin
, tan
, ctan
, arccos
, arcsin
, arctan
, arcctan
and give option to change amplitude of functions and move function in x dimension and the program should start to generate after clicking the button.