0

Update: I've tried to solve the problem by making the panel just the way the other one was made but I'm getting this exception

Exception in thread "main" java.lang.NullPointerException
at java.awt.Container.addImpl(Container.java:1040)
at java.awt.Container.add(Container.java:926)
at Plotter.createLayout(Plotter.java:48)
at Plotter.<init>(Plotter.java:37)
at Plotter.main(Plotter.java:325)

and this the code which the I get the error from(Plotter.java) : (the parts I have added are createsliderpanel() ,slider, playButton and down )

also the exception doesn't happen when this line is commented and not used:

c.add(sliderPanel , BorderLayout.SOUTH;

/

import java.util.*;
import java.io.*;
import javax.swing.*;
import javax.swing.Timer;
import java.awt.*;
import java.awt.event.*;


public class Plotter extends JFrame implements ActionListener
{   

private JMenuBar menuBar = new JMenuBar();
private JMenu fileMenu = new JMenu("File");
private JMenuItem openMenuItem = new JMenuItem("Open");
private JMenuItem saveMenuItem = new JMenuItem("Save");
private JMenuItem exitMenuItem = new JMenuItem("Exit");

private JComboBox eqCombo = new JComboBox();
private JButton addButton, removeButton, clearButton , playbutton ;
private Graph graph;
private JPanel userPanel , sliderPanel;
private JSlider slider;
private JTextField field;

public Plotter(double lowX, double highX, double frequency, String file) throws GraphArgumentsException, IOException
{
    super("Plotter");

    createNewGraph(lowX, highX, frequency, file);
    createLayout();
    createsliderpanel();
}

private void createLayout() throws GraphArgumentsException
{
    Container c = getContentPane();
    c.setLayout(new BorderLayout());
    setSize(600,500);
    c.add(graph, BorderLayout.CENTER);
    c.add(userPanel, BorderLayout.NORTH);
    c.add(sliderPanel , BorderLayout.SOUTH);
    createMenuBar();
}



/**
 * Creates a new Graph instance and adds equations from file into Graph
 * @param eqFile file where equations are stored
 * @throws IOException
 */
private void createNewGraph(double minX, double maxX, double freq, String eqFile) throws GraphArgumentsException, IOException
{
    Equation[] eq = null;
    graph = new Graph(minX, maxX, freq);

    eq = readEquationsFromFile(eqFile);

    if (eq != null)
        addEquation(eq);

    graph.setBackground(Color.WHITE);
    userPanel = createUserPanel(eq);
}

private void createMenuBar()
{
    menuBar.add(fileMenu);
    fileMenu.add(openMenuItem);
    fileMenu.add(saveMenuItem);
    fileMenu.addSeparator();
    fileMenu.add(exitMenuItem);
    openMenuItem.addActionListener(this);
    saveMenuItem.addActionListener(this);
    exitMenuItem.addActionListener(this);
    setJMenuBar(menuBar);
}

/**
 * Create user panel at top of the GUI for adding and editing functions
 * @param eq equation list to add into the combo box
 * @return panel containing buttons and an editable combo box
 */
private JPanel createUserPanel(Equation[] eq)
{
    JPanel up = new JPanel(new FlowLayout(FlowLayout.LEFT));
    eqCombo.setEditable(true);

    if (eq != null)
    {
        //Add all equations into the combo box
        for (int i = 0; i < eq.length; i++)
            eqCombo.addItem(eq[i].getPrefix());
    }

    addButton = new JButton("Add");
    removeButton = new JButton("Remove");
    clearButton = new JButton("Clear");

    addButton.addActionListener(this);
    removeButton.addActionListener(this);
    clearButton.addActionListener(this);

    up.add(eqCombo);
    up.add(addButton);
    up.add(removeButton);
    up.add(clearButton);


    return up;





}

// slider panel
private JPanel createsliderpanel()
{
    JPanel down = new JPanel(new FlowLayout(FlowLayout.LEFT));

    playbutton = new JButton("Play");
    slider = new JSlider();
    field = new JTextField();


    down.add(playbutton);
    down.add(slider);
    down.add(field);


    return down;
}



/**
 * Check action lister for button and menu events
 */
public void actionPerformed(ActionEvent e)
{
    if (e.getSource() == addButton)
        addEquation((String)eqCombo.getSelectedItem());
    else if (e.getSource() == removeButton)
        removeEquation(eqCombo.getSelectedIndex());
    else if (e.getSource() == saveMenuItem)
        saveEquationList();
    else if (e.getSource() == openMenuItem)
        loadEquations();
    else if (e.getSource() == clearButton)
        clearEquations();
    else if (e.getSource() == exitMenuItem)
        System.exit(0);
}

/**
 * Save equations to file
 *
 */
private void saveEquationList()
{
    try
    {
        PrintWriter out = new PrintWriter(new FileWriter("myeq.txt"));
        for (int i = 0; i < eqCombo.getItemCount(); i++)
            out.println(eqCombo.getItemAt(i));

        out.close();
    }
    catch (IOException e)
    {
        System.out.println(e);

    }
}


private void clearEquations()
{
    graph.removeAllEquations();
    eqCombo.removeAllItems();
}

/**
 * Load equations from file into graph
 *
 */
private void loadEquations()
{
    String file=null;
    JFileChooser fc = new JFileChooser();

    fc.showOpenDialog(null);
    if (fc.getSelectedFile() != null)
    {
        file = fc.getSelectedFile().getPath();

        try
        {
            Equation[] eq = readEquationsFromFile(file);
            if (eq != null)
            {
                clearEquations();
                addEquation(eq);

                //Restock combo box with new equations
                for (int i = 0; i < eq.length; i++)
                    eqCombo.addItem(eq[i].getPrefix());
            }
        }
        catch (IOException e)
        {
            JOptionPane.showMessageDialog(null, "ERR4: Unable to read or access file", "alert", JOptionPane.ERROR_MESSAGE);
        }
    }
}

/**
 * Add an equation to the Graph
 * @param eq equation
 */
private void addEquation(String eq)
{
    try
    {
        if (eq != null && !eq.equals(""))
        {
            Equation equation = new Equation(eq);
            eqCombo.addItem(eq);
            graph.addEquation(equation);
        }
    }
    catch (EquationSyntaxException e)
    {
        JOptionPane.showMessageDialog(null, "ERR2: Equation is not well-formed", "alert", JOptionPane.ERROR_MESSAGE);
    }
}
/**
 * Add multiple equations to Graph
 * @param eq equation array
 */
private void addEquation(Equation[] eq)
{
    for (int i = 0; i < eq.length; i++)
    {
        graph.addEquation(eq[i]);
    }
}

/**
 * Remove equation from Graph
 * @param index index to remove
 */
private void removeEquation(int index)
{
    if (index >= 0)
    {
        graph.removeEquation(index);
        eqCombo.removeItem(eqCombo.getSelectedItem());
    }
}

/**
 * Read file and extract equations into an array. Any errors on an equation halt the loading of the entire file
 * @param file name of file containing equations
 * @return array of equations
 * @throws IOException
 */
public Equation[] readEquationsFromFile(String file) throws IOException
{
    ArrayList<Equation> eqList = new ArrayList<Equation>(20);

    if (file == null)
        return null;

    String line;
    int lineCount = 1;
    try
    {
        BufferedReader br = new BufferedReader(new FileReader(file));
        while ((line = br.readLine()) != null)
        {
            Equation eq = new Equation(line);
            eqList.add(eq);
            lineCount++;
        }
        br.close();
        return ((Equation[])(eqList.toArray(new Equation[0])));
    }
    catch (EquationSyntaxException e)
    {
        JOptionPane.showMessageDialog(null, "ERR2.1: Equation on line " + lineCount + " is not well-formed", "alert", JOptionPane.ERROR_MESSAGE);
        return null;
    }
}

/**
 * Set up Plotter object and draw the graph.
 * @param args command line arguments for Plotter
 */
public static void main(String[] args)
{
    Scanner s = new Scanner(System.in);
    String eqFile = null;
    try
    {
        ///double minX = Double.parseDouble(args[0]);
    //  double maxX = Double.parseDouble(args[1]);
    //  double frequency = Double.parseDouble(args[2]);
        double minX = -10; 
        double maxX = 10; 
        double frequency = 0.01;

        if (args.length > 3)
            eqFile = args[3];

        Plotter plotterGUI = new Plotter(minX, maxX, frequency, eqFile);
        plotterGUI.setVisible(true);
        plotterGUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }
    catch (NumberFormatException e)
    {
        System.out.println("ERR: Invalid arguments");
    }
    catch (GraphArgumentsException e)
    {
        System.out.println(e.getMessage());
    }
    catch (IOException e)
    {
        System.out.print("ERR4: Unable to read or access file");
    }

    }
}

I'm trying to a panel containing a slider ,textfield and a button to a frame

for the slider I'm using the answer from This question and for the graphing part I'm using this program (specifically the Plotter.java file).

My question is specifically about the general look of the program. how can I change the GUI of the Plotter.java file so it will look like the second image below ?

this is how the Plotter.java GUI looks : Plotter.java GUI

and this is how it should look like(the white panel is where the graph will be drawn) : enter image description here

Vicarious
  • 131
  • 18
  • 1
    Use nested panels. http://docs.oracle.com/javase/tutorial/uiswing/layout/index.html – Radiodef Feb 14 '15 at 19:26
  • Exactly -- learn about the layout managers and then use them to help you improve your GUI. – Hovercraft Full Of Eels Feb 14 '15 at 21:32
  • @HovercraftFullOfEels I've edited the question now I worked on the problem and I've updated about what my question is now – Vicarious Feb 14 '15 at 21:47
  • Vicarious, this is a completely new and different problem, but most importantly you need to learn the general concepts of how to debug a NPE (NullPointerException). **You should critically read your exception's stacktrace to find the line of code at fault, the line that throws the exception, and then inspect that line carefully**, find out which variable is null, and then trace back into your code to see why. You will run into these again and again, trust me. – Hovercraft Full Of Eels Feb 14 '15 at 21:50
  • @HovercraftFullOfEels thank you for your answer but is there any easier or faster way to solve this specific problem ? I've started reading about null point exceptions but I'm quite new to java and the concepts and solutions for this kind of exceptions are quite hard for me to understand – Vicarious Feb 14 '15 at 21:56
  • `"...but is there any easier or faster way to solve this specific problem ? I've started reading about null point exceptions..."` -- no. – Hovercraft Full Of Eels Feb 14 '15 at 22:20

0 Answers0