|
Often we wish to produce a second window from within our GUIs. In this example I present a fairly generic GUI that can be used as a template to produce a second winow (on the click of a button) containinmg a drawing area. The example application allows the user to input X and Y coordinates and a width and height for a rectangle or an oval (as directed by the user) to be drawn in a second window.
The example comprises three classes:
// MY GUI DRAWING EXAMPLE // Frans Coenen // University of Liverpool // 2 September 2003 import java.io.*; import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; // Other packages in here if any public class MyGUI extends JFrame implements ActionListener{ /* ------ FIELDS ------ */ // Constants /** Minimum support value */ private static final int MINIMUM = 1; /** Maximum support value */ private static final int MAXIMUM = 200; // GUI features /** The text area to list results. */ private JTextArea textArea; /** Input button for X coordinate input. */ private JButton inputXcoordButton; /** Input button for Y coordinate input. */ private JButton inputYcoordButton; /** Input button for width input. */ private JButton inputWidthButton; /** Input button for height input. */ private JButton inputHeightButton; /** Draw rectangle button. */ private JButton drawRectangleButton; /** Draw Oval button. */ private JButton drawOvalButton; /** Input panel */ private JPanel inputPanel; /** Output panel */ private JPanel outputPanel; // Other fields /** Rectanmgle width and height with defualt values. */ private int width = 10; private int height = 10; /** X and Y coordinates with default values. */ private int xCoord = 10; private int yCoord = 10; /* ------ CONSTRUCTORS ------ */ public MyGUI(String s) { super(s); // Create instance of AssocRuleMining // Content pane Container container = getContentPane(); container.setBackground(Color.pink); container.setLayout(new BorderLayout(5,5)); // 5 pixel gaps // Create panels createInputButtonsPanel(); createOutputButtonsPanel(); // Button Panel JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new GridLayout(1,2)); buttonPanel.add(inputPanel); buttonPanel.add(outputPanel); container.add(buttonPanel,BorderLayout.NORTH); // Text area textArea = new JTextArea(40, 15); textArea.setEditable(false); container.add(new JScrollPane(textArea),BorderLayout.CENTER); } /* CREATE INPUT PANEL. */ /** Creates the buttons for the input panel. */ private void createInputButtonsPanel() { // Create panel inputPanel = new JPanel(); inputPanel.setLayout(new GridLayout(4,1)); inputPanel.setBorder(BorderFactory.createTitledBorder("Input")); // Add buttons inputXcoordButton = new JButton("X Coordinate"); inputXcoordButton.addActionListener(this); inputYcoordButton = new JButton("Y Coordinate"); inputYcoordButton.addActionListener(this); inputWidthButton = new JButton("Width"); inputWidthButton.addActionListener(this); inputHeightButton = new JButton("Height"); inputHeightButton.addActionListener(this); // Add to panel inputPanel.add(inputXcoordButton); inputPanel.add(inputYcoordButton); inputPanel.add(inputWidthButton); inputPanel.add(inputHeightButton); } /* CREATE OUTPUT PANEL */ /** Creates the buttons for the output panel. */ private void createOutputButtonsPanel() { outputPanel = new JPanel(); outputPanel.setLayout(new GridLayout(2,1)); outputPanel.setBorder(BorderFactory.createTitledBorder("Output")); // Add buttons drawRectangleButton = new JButton("Draw Rectangle"); drawRectangleButton.addActionListener(this); drawOvalButton = new JButton("Draw Oval"); drawOvalButton.addActionListener(this); // add to panel outputPanel.add(drawRectangleButton); outputPanel.add(drawOvalButton); } /* ACTION PERFORMED */ public void actionPerformed(ActionEvent event) { // Input panel if (event.getActionCommand().equals("X Coordinate")) inputXcoordinate(); if (event.getActionCommand().equals("Y Coordinate")) inputYcoordinate(); if (event.getActionCommand().equals("Width")) inputWidth(); if (event.getActionCommand().equals("Height")) inputHeight(); // Output panel if (event.getActionCommand().equals("Draw Rectangle")) drawRectangle(); if (event.getActionCommand().equals("Draw Oval")) drawOval(); } /* ---------------------------------------------------------------- */ /* */ /* INPUT */ /* */ /* ---------------------------------------------------------------- */ /* INPUT X COORDINATE */ private void inputXcoordinate() { int value = getInputValue("X coordinate","X COORDINATE"); if (value >= MINIMUM) { xCoord = value; textArea.append("X coordinate = " + xCoord + "\n"); } textArea.append("\n"); } /* INPUT Y COORDINATE */ private void inputYcoordinate() { int value = getInputValue("Y coordinate","Y COORDINATE"); if (value >= MINIMUM) { yCoord = value; textArea.append("Y coordinate = " + yCoord + "\n"); } textArea.append("\n"); } /* INPUT WIDTH */ private void inputWidth() { int value = getInputValue("Width","WIDTH"); if (value >= MINIMUM) { width = value; textArea.append("Width = " + width + "\n"); } textArea.append("\n"); } /* INPUT HEIGHT */ private void inputHeight() { int value = getInputValue("Height","HEIGHT"); if (value >= MINIMUM) { height = value; textArea.append("Height = " + height + "\n"); } textArea.append("\n"); } /* GET INPUT VALUE */ private int getInputValue(String label1, String label2) { int value; textArea.append("INPUT " + label2 + "\n---------------------\n"); // Try-catch block try{ while (true) { String stNum1 = JOptionPane.showInputDialog("Input " + label1 + ". Integer value between " + MINIMUM + " and " + MAXIMUM); value = Integer.parseInt(stNum1); if (value>=MINIMUM && value <= MAXIMUM) return(value); JOptionPane.showMessageDialog(null, label2 + " VALUE INPUT ERROR:\n" + "input = " + value + "\nsupport threshold input must be an integer " + "or a floating point number between " + MINIMUM + " and " + MAXIMUM); } } catch(NumberFormatException e) { } // Default returm return(-99); } /* ---------------------------------------------------------------- */ /* */ /* OUTPUT */ /* */ /* ---------------------------------------------------------------- */ /* DRAW RECTANGLE */ /** Commences processes of drawing a rectangle to the screen in a separate window. */ private void drawRectangle() { textArea.append("Draw Rectangle\n---------------------\n"); MyWindow newWindow = new MyWindow("Rectangle",xCoord,yCoord,width,height); newWindow.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); textArea.append("Done\n\n"); } /* DRAW OVAL */ /** Commences processes of drawing a oval to the screen in a separate window. */ private void drawOval() { textArea.append("Draw Oval\n---------------------\n"); MyWindow newWindow = new MyWindow("Oval",xCoord,yCoord,width,height); newWindow.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); textArea.append("Done\n\n"); } /* ------------------------------------------------------- */ /* */ /* MAIN METHOD */ /* */ /* ------------------------------------------------------- */ /* MAIN METHOD */ public static void main(String[] args) throws IOException { // Create instance of class AprioriTgui MyGUI newGUI = new MyGUI("MY EXAMPLE GUI"); // Make window vissible newGUI.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); newGUI.setSize(400,400); newGUI.setVisible(true); } } |
Table 1: The MyGUI classM
// MY WINDOW EXAMPLE CLASS // Frans Coenen // MOnday 30 June 2003 // The University of Liverpool, UK import java.awt.*; import java.awt.geom.*; // Java extension packages import javax.swing.*; // Other packages in here if any public class MyWindow extends JFrame { // ------------------- FIELDS ------------------------ /* CONSTANTS */ static final int CANVAS_WIDTH = 400; static final int CANVAS_HEIGHT = 400; // ------------------ CONSTRUCTORS ------------------- public MyWindow(String type, int x, int y, int w, int h) { super("My Window"); // Create drawing area MyCanvas canvas = new MyCanvas(type,x,y,w,h); canvas.setBackground(Color.white); canvas.setPreferredSize(new Dimension(CANVAS_WIDTH,CANVAS_HEIGHT)); // Create scroll pane JScrollPane sp1 = new JScrollPane(canvas); // Get container and add scroll pane Container container = getContentPane(); container.setBackground(Color.pink); container.add(sp1); setSize(300,300); setVisible(true); } // ------------------ METHODS ------------------------ /* Include any additional methods that might need to be called from the constructor in here. */ } |
Table 2: The NyWindow classM
// MY CANVAS DRAWING EXAMPLE // Frans Coenen // University of Liverpool // 27 June 2003 import java.awt.*; // Java extension packages import javax.swing.*; // Other packages if any public class MyCanvas extends JPanel { /* FIELDS */ private int xCoord, yCoord, width, height; private String type; /* CONSTRUCTOR */ public MyCanvas(String t, int x, int y, int w, int h) { super(); // Set fields type = t; xCoord = x; yCoord = y; width = w; height = h; } /* METHODS. Top level method sgould overwrite paiontComponent method in Java Swing API but can include calls to any other methods as desired. */ public void paintComponent(Graphics g) { // Make the panel opaque super.paintComponent(g); // draw g.setColor(Color.pink); if (type.equals("Rectangle")) { g.fillRect(xCoord,yCoord,width,height); g.setColor(Color.red); g.drawRect(xCoord,yCoord,width,height); } else if (type.equals("Oval")) { g.fillOval(xCoord,yCoord,width,height); g.setColor(Color.red); g.drawOval(xCoord,yCoord,width,height); } } } |
Table 3: The MyCanvas classM
Figure 1 shows the top level GUI and Figure 2 some eaxmple output (an oval ibn this case).
Figure 1: The MyExampleGUI window
Figure 2: Example output (oval)