Jump to content

Problem: returning a custom JPanel to an applet

- - - - -

  • Please log in to reply
No replies to this topic

#1
MasterAchilles

MasterAchilles

    Newbie

  • Members
  • Pip
  • 5 posts
I am trying to create applet which first asks a user for info and then stores that info in an array of a separate class. Using that info it creates a Table. So far that all works. Now I am trying to use that info to create a graph.

I have created an custom panel that this initial class can call to paint() the oanel and its drwan contents. For some reason however it is just printing the panel by itself to the applet.

In the actionPerformed() method I am calling the method createGraph() which returns the JPanel to the content pane of the applet.


package PERT_Project;

import java.awt.*;


import javax.swing.*;

import javax.swing.table.*;

import java.awt.event.*;


public class PERT_Data extends JApplet implements ActionListener

{

	// Initialize Pert_SETUP to store info about each node of the graph.

	PERT_SETUP[] path = new PERT_SETUP[10];

	

	// Initialize Panels to go through the different screens of the applet.

	// 1: PERT_GetData(): Get info about nodes from each user.

	// 2: PERT_Table(): Print out JTable for user

	// 3: PERT_Graph(): Print out Graph with nodes and lines.

	private JPanel dataPanel;

	private JPanel finalTablePanel;

	private PaintGraph graphPanel;

	

	// input PERT_Data

	private JLabel activityLabel;

	private JTextField activityField;

	

	private JLabel descriptionLabel;

	private JTextField descriptionField;

	

	private JLabel durationLabel;

	private JTextField durationField;

	

	private JLabel successorsLabel;

	private JTextField successorField1;

	private JTextField successorField2;

	private JTextField successorField3;

	

	private JButton enterButton;

	private JButton createTableButton;

	

	// createPERT_Table

	private JButton createGraphButton;

	private JTable PERT_Table;

	

	// Action Performed

	int index = 0;

	

	private boolean tableCreated = false;

	private boolean criticalPathCreated = false;

	private boolean graphCreated = false;

	

	// Initialize applet and construct the GUI.

	public void init()

	{

		try

		{

			SwingUtilities.invokeAndWait(new Runnable()

			{

				public void run()

				{

					for(int m = 0; m < path.length; m++)

					{

						path[m] = new PERT_SETUP();

					}

					

					tableCreated = false;

					criticalPathCreated = false;

					

					//Creates a box layout for the JPanels.

					getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));

					

					setSize(600, 600);

					

					add(PERT_GetData());

				}

			});

		} 

		catch(Exception e)

		{

			System.out.println("Can't create because of " + e);

		}

	}

	

	// Initial GUI for User input data

	public JPanel PERT_GetData()

	{

		// Set Layout

		setLayout(new FlowLayout());

		

		// Create a new JPanel to hold all elements.

		dataPanel = new JPanel();

		

		// Set Preferred Size of Panel

		dataPanel.setPreferredSize(new Dimension(340, 300));

		

		dataPanel.setOpaque(true);

		

		dataPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 5));

		

		// Create Labels

		activityLabel = new JLabel("Enter Activity Character: ");

		descriptionLabel = new JLabel("Enter a short Description for this Activity.");

		durationLabel = new JLabel("Enter the time required to perform this Activity.");

		successorsLabel = new JLabel("Enter all of the successors of this Activity.(From 1- 3)");

		

		// Create Text Fields.

		activityField = new JTextField(5);

		descriptionField = new JTextField(20);

		durationField = new JTextField(15);

		successorField1 = new JTextField(5);

		successorField2 = new JTextField(5);

		successorField3 = new JTextField(5);

		

		// Create Enter button.

		enterButton = new JButton("Enter Activity Data");

		enterButton.setActionCommand("Enter Data");

		

		// Create Table Button.

		createTableButton = new JButton("Create Table");

		

		// Add Action Listener to enter button.

		enterButton.addActionListener(this);

		

		// Add Action Listener to create Table Button.

		createTableButton.addActionListener(this);

		

		// Add the components to the JPanel.

		dataPanel.add(activityLabel);

		dataPanel.add(activityField);

		dataPanel.add(descriptionLabel);

		dataPanel.add(descriptionField);

		dataPanel.add(durationLabel);

		dataPanel.add(durationField);

		dataPanel.add(successorsLabel);

		dataPanel.add(successorField1);

		dataPanel.add(successorField2);

		dataPanel.add(successorField3);

		dataPanel.add(enterButton);

		dataPanel.add(createTableButton);

		

		dataPanel.validate();

		

		// Return panel holding data from user to the applet.

		return dataPanel;

	}

	

	public JPanel createPERT_Table()

	{

		createGraphButton = new JButton("Create Graph");

		createGraphButton.setMaximumSize(new Dimension(50, 25));

		

		// Press to create graph

		createGraphButton.addActionListener(this);

		

		JPanel buttonPanel = new JPanel();

		buttonPanel.add(createGraphButton, BorderLayout.CENTER);

	

		JPanel headerArea = new JPanel();

		headerArea.setLayout(new BorderLayout());

		headerArea.add(PERT_Table.getTableHeader(), BorderLayout.LINE_START);

		

		// Create area that holds entire Table Panel

		// Initialize each panels place in this main panel.

		JPanel tablePanel = new JPanel();

		tablePanel.setLayout(new BorderLayout());

		

		// Header goes at the top of tablePanel(NORTH)

		tablePanel.add(headerArea, BorderLayout.PAGE_START);

		

		// The actual Table(PERT_Table) goes to the EAST.

		tablePanel.add(PERT_Table, BorderLayout.LINE_START);

		

		// Button goes to the SOUTH.

		tablePanel.add(buttonPanel, BorderLayout.PAGE_END);

		

		finalTablePanel = new JPanel();

		finalTablePanel.setLayout(new BorderLayout());

		finalTablePanel.add(tablePanel, BorderLayout.LINE_START);

		

		finalTablePanel.validate();

		

		// Put panel holding table onto the applet.

		return finalTablePanel;

	}

	

	public JPanel createGraph()

	{

		graphPanel = new PaintGraph();

		

		return graphPanel;

	}

	

	public void actionPerformed(ActionEvent ae) 

	{

		if(ae.getActionCommand().equals("Enter Data"))

		{

			String tempAct = activityField.getText().trim();

			System.out.println(tempAct);

			

			// Set Activity

			path[index].setActivity(tempAct);

			activityField.setText("");

			

			// Set Description

			path[index].setDescription(descriptionField.getText());

			descriptionField.setText("");

			

			// Set Duration

			path[index].setDuration(Integer.parseInt(durationField.getText()));

			durationField.setText("");

			

			// Set Successors

			path[index].setSuccessor1(successorField1.getText());

			successorField1.setText("");

			path[index].setSuccessor2(successorField2.getText());

			successorField2.setText("");

			path[index].setSuccessor3(successorField3.getText());

			successorField3.setText("");

			

			index = index + 1;

		}

		

		else if(ae.getActionCommand().equals("Create Table"))

		{

			if(index > 0 && !tableCreated)

			{		

				PERT_Table = new JTable(new PERT_TableModel(index, path));

				

				getContentPane().add(createPERT_Table());

				

				tableCreated = true;

				

				getContentPane().remove(dataPanel);

			}

		} 

		

		else if(ae.getActionCommand().equals("Create Graph"))

		{

			getContentPane().add(createGraph());

			

			graphCreated = true;

			

			getContentPane().remove(finalTablePanel);

		}

	}

}


I am just using a test case and this is not really what I want the Panel to display but I am just trying to get it to work at the moment.

package PERT_Project;


import javax.swing.*;

import java.util.*;

import java.awt.*;

import java.awt.event.*;


public class PaintGraph extends JPanel

{

	public int xPos;

	public int yPos;

	public int radius;

	public Color color;

	

	public int earliestStart;

	public int earliestFinish;

	public int time;

	public String name;

		

	// Default configuration of this panel

	public PaintGraph()

	{

		xPos = 100;

		yPos = 100;

		radius = 20;

	}

	

	// Override the paintComponent() method

	protected void paintComponent(int index, Graphics g)

	{

		// Call super class method first to repaint component

		super.paintComponent(g);

		

		// cast the graphics object into a Graphics2D object

		// because we want pretty anti-aliasing

		Graphics2D g2d = (Graphics2D)g;

		

        // Enable anti-aliasing for shapes

		g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,

				RenderingHints.VALUE_ANTIALIAS_ON);

		

		g2d.fillOval(xPos, yPos, radius, radius);

	}

}


Is there any other way to return it so that it repaints?




1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users