Search code examples
javapaint

Bar Chart from different class in to GUI class


I have Gui class with a JPanel and JButton. When the button is clicked i would like to display the graph in my JPanel. The Graph is in different class. Can someone help me do this please?

GUI CLASS:

 public class Gui  extends JFrame implements ActionListener{  

     JButton showGraph;

     public Gui() {

    super("GUI");
    setSize(1200,600);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    showGraph = new JButton("SHOW GRAPH");
    JPanel mainPanel = new JPanel();
    add(mainPanel);
    mainPanel.setLayout(new GridLayout(2,0,10,10));
    mainPanel.setBorder(new EmptyBorder(10,10,10,10));
    mainPanel.add(showGraph);
    JPanel graphPanel = new JPanel();
    graphPanel.setBackground(Color.yellow);
    mainPanel.add(graphPanel);

    showGraph.addActionListener(this);

  }



 public static void main (String[] args){
    new Gui().setVisible(true);
}

@Override
public void actionPerformed(ActionEvent e) {
    if (e.getSource() == showGraph) {
        SimpleBarChart b =  new SimpleBarChart();
        b.getGraph();
    }
}
}

Solution

  • Change your getGraph() method to take a JFrame and pass in this.

    public void getgraph(JFrame f) {
    
    //JFrame f = new JFrame();
    f.setSize(400, 300);
    ... as before ...
    }
    

    Then call in actionPerformed

    if (e.getSource() == showGraph) {
        SimpleBarChart b =  new SimpleBarChart();
        b.getGraph(this);
    }
    

    You can't have a frame inside a frame. Another option would be to make getGraph() return a JPanel and then you could put the panel in your existing frame instead of updating the whole frame.