Hi,
I'm working on a dissertation based around graph visualization. I need to make a GUI for my program but I am having trouble getting the JPanels to display what is required. My code so far:
//Class to create the GUI
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Component;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JPanel;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JLabel;
public class GUI extends JFrame
{
private GridBagLayout layout;
private GridBagConstraints constraints;
private JButton upload;
private JButton input;
private JButton edit;
private JButton clear;
private JButton save;
private JButton sunflower;
private JButton type;
private JButton mini;
private JButton saveMini;
private JButton saveAll;
private JPanel graph;
private JPanel settings;
private JPanel miniGraph;
//Set up the GUI
public GUI()
{
super( "TITLE OF PROGRAM" ); // Set title
layout = new GridBagLayout(); // Instantiate layout
setLayout( layout ); // Set frame layout
constraints = new GridBagConstraints(); //Instantiate constraints
// Create buttons
upload = new JButton( "Upload Graph Data" );
input = new JButton( "Input Graph Data" );
edit = new JButton( "Edit Graph Data" );
clear = new JButton( "Clear Graph" );
save = new JButton( "Save Graph image" );
sunflower = new JButton( "Sunflower Settings" );
type = new JButton( "Mini-Graph Type" );
mini = new JButton( "Mini-Graph settings" );
saveMini = new JButton( "Save Mini-Graph image" );
saveAll = new JButton( "Save Project" );
// Create Panels
graph = new JPanel( layout );
settings = new JPanel( layout );
miniGraph = new JPanel( layout );
JLabel graphLabel = new JLabel( "Graph" );
graph.add( graphLabel );
JLabel miniGraphLabel = new JLabel( "Mini-Graph" );
miniGraph.add( miniGraphLabel );
final JLabel settingsLabel = new JLabel("Settings" );
//Set weights and anchor
constraints.weightx = 1;
constraints.weighty = 1;
constraints.anchor = GridBagConstraints.NORTHWEST;
//Add buttons and allow for horizontal resize
//addComponent() declared at lines !!!!!!!!!!!!!!!!!!!!!!
constraints.fill = GridBagConstraints.HORIZONTAL;
addComponent( upload, 0, 0, 1, 1 );
addComponent( input, 1, 0, 1, 1 );
addComponent( edit, 2, 0, 1, 1 );
addComponent( clear, 3, 0, 1, 1 );
addComponent( save, 4, 0, 1, 1 );
//Change weighty to place second row of buttons under first row
constraints.weighty = 100;
addComponent( sunflower, 0, 1, 1, 1 );
addComponent( type, 1, 1, 1, 1 );
addComponent( mini, 2, 1, 1, 1 );
addComponent( saveMini, 3, 1, 1, 1 );
addComponent( saveAll, 4, 1, 1, 1 );
//Add listeners and events for all buttons
upload.addActionListener(
new ActionListener() //Inner class
{
public void actionPerformed( ActionEvent event )
{
settings.removeAll();
settings.add( settingsLabel );
settings.repaint();
}
}
);
//Add panels and allow resize in both directions
constraints.fill = GridBagConstraints.BOTH;
addComponent( graph, 0, 2, 3, 2 );
addComponent( settings, 3, 2, 2, 1 );
addComponent( miniGraph, 3, 3, 2, 1 );
} // End GUI constructor
//addComponent method
private void addComponent( Component component, int column, int row, int width, int height )
{
constraints.gridx = column; //Set gridx
constraints.gridy = row; //Set gridy
constraints.gridwidth = width; //Set gridwidth
constraints.gridheight = height; //Set gridheight
layout.setConstraints( component, constraints ); //Set constraints
add( component ); //Add component to frame
} // End addComponent method
} // End GUI class
The labels have nothing to do with the program I'm just using them to test that my panels are working. The GUI opens fine ( the layout needs a bit of tweaking but I'm ignoring that for now ) but when I click the "upload" button nothing happens. I have tried all I can think of along with a lot of online searches and book reading but the only help anyone gives is to use setVisible on what needs to be displayed. I would prefer to avoid using setVisible as each button clicked has it's own set of components that need to be displayed in that panel.
Also, when adding these components to the panel is it possible to use a separate class file for handling that code rather than keeping all of the code in this file.