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.
I don't think the code you provided is complete, but try to look for a place where you do
wybranaFunkcja.equals("string")
because aperantly wybranaFunkcja is null and that's why it is failing. Then try to investigate why it is null, maybe it is not in the constructor or there a setter for it that is not being called.