Java Swing GridLayout Example
In Swing, in order to arrange components in a form, dialog box etc. in user friendly manner layout manager is found to be very useful. There are several layout managers. GridLayout
is such layout manager.
1. Introduction
GridLayout
actually forms a grid like arrangement of cells. This is just like one excel spreadsheet where each cell is of same size. If the parent window is resized, the grids are also resized, keeping the same aspect ratio. Components are required to be added in each cell.
2. Technologies Used
- Java (jdk 1.6.x or higher will be fine)
- Eclipse ( Galileo or higher version is required)
3. Overview
Like other layout manager classes, java.awt.GridLayout
class implements java.awt.LayoutManager
.
At the time GridLayout
object is created, number of rows and number of columns must be mentioned. For example GridLayout layout = new GridLayout(2,3)
. Here 2 refers to number of rows and 3 refers to number of columns. The grid mentioned above will have 6 cells in it, 3 in each row.
While adding components in cells, if the cell no is not specified, the components will be added to the cells starting from upper leftmost cell to lower rightmost cell, in this direction i.e. addition will start from the leftmost cell of the topmost row moving rightwards, and then comes down to the next row (if available) and gets filled up in the same way.
If component is required to be added in a specific cell, then row number and column number is required to be specified while adding the component. For example 0,0 cell number refers to the leftmost cell of the first i.e. topmost row.
4. Description of GridLayout feature in the example
In the example a GridLayout
of 2 rows and 3 columns are created. In all except 5th cell, JEditPane
is attached. In the 5th cell, one JSplitPane
component is added. In the right side of the JSplitPane
component, one JList
component is added which shows cell numbers. In the right side of the JSplitPane
, one JFileChooser
is added to show only .txt files in system drive.
Once a text file is chosen, keeping 1st Box option selected from the JList
, after clicking the Open button of the JFileChooser
component, content of the text file appears in cell 1.
Once a text file is chosen, keeping 6th Box option selected from the JList
, after clicking the Open button of the JFileChooser
component, content of the text file appears in cell 6.
If a file is opened, without selecting any option in JList
, error message is generated.
5. Description of GridLayout feature in the source code
Here first of all one JPanel
object is created for GridLayout
of dimension 2X3 and then components are added to the grid in turn. To the JFileChooser
object, ActionListner
is assigned which is taking care of the click to Open button of the JFileChooser
component. As per the choice of the JList
component, the content of the file is shown in the corresponding cell of the grid.
SwingGridLayoutExampleFrame.java
package com.javacodegeeks.example.swing.layoutmanager.gridlayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import javax.swing.JButton; import javax.swing.JEditorPane; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTextField; import javax.swing.filechooser.FileNameExtensionFilter; public class SwingGridLayoutExampleFrame extends JFrame{ /** * */ private static final long serialVersionUID = 8008949174170019398L; public SwingGridLayoutExampleFrame(){ JPanel panel = new JPanel(new GridLayout(2,3)); final JEditorPane textField1 = new JEditorPane(); JScrollPane scrollPane1 = new JScrollPane(textField1); panel.add(scrollPane1,0,0); final JEditorPane textField2 = new JEditorPane(); JScrollPane scrollPane2 = new JScrollPane(textField2); panel.add(scrollPane2,0,1); final JEditorPane textField3 = new JEditorPane(); JScrollPane scrollPane3 = new JScrollPane(textField3); panel.add(scrollPane3); final JEditorPane textField4 = new JEditorPane(); JScrollPane scrollPane4 = new JScrollPane(textField4); panel.add(scrollPane4); final JEditorPane textField5 = new JEditorPane(); JSplitPane splitPane = new JSplitPane(); splitPane.setOrientation(JSplitPane.HORIZONTAL_SPLIT); splitPane.setDividerLocation(50); final JList list = new JList(new String[]{"1st Box","2nd Box","3rd Box","4th Box","6th Box"}); splitPane.setLeftComponent(list); final JFileChooser fileChooser = new JFileChooser(); fileChooser.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { if (evt.getActionCommand().equals(javax.swing.JFileChooser.APPROVE_SELECTION)) { String selected = list.getSelectedValue() != null ? list.getSelectedValue().toString() : null; if(selected == null) JOptionPane.showMessageDialog(fileChooser, "You must choose one item from the list to proceed."); else{ File file = fileChooser.getSelectedFile(); if(file.getName().endsWith(".txt")){ char[] content = readFile(file); if(content == null){ JOptionPane.showMessageDialog(fileChooser, "File size too large."); }else if(content.length == 0){ JOptionPane.showMessageDialog(fileChooser, "Empty file."); }else{ switch(selected.charAt(0)){ case '1': textField1.setText(new String(content)); break; case '2': textField2.setText(new String(content)); break; case '3': textField3.setText(new String(content)); break; case '4': textField4.setText(new String(content)); break; case '6': textField5.setText(new String(content)); break; } } } } } } }); FileNameExtensionFilter filter = new FileNameExtensionFilter("TEXT FILES", "txt", "text"); fileChooser.setFileFilter(filter); splitPane.setRightComponent(fileChooser); panel.add(splitPane); JScrollPane scrollPane5 = new JScrollPane(textField5); panel.add(scrollPane5); add(panel); pack(); } private char[] readFile(File inputFile){ BufferedReader inputReader = null; char[] content = null; long availableHeap = Runtime.getRuntime().freeMemory(); long fileSize = inputFile.length(); try { if(fileSize <= availableHeap){ content = new char[(int)inputFile.length()]; inputReader = new BufferedReader(new FileReader(inputFile)); inputReader.read(content); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return content; } }
line 32: One JPanel
object is created for GridLayout
of size 2X3.
line 35: JScrollPane
component object created for JEditorPane
component object, is added to (0,0)th i.e. the leftmost cell of the first row of the grid.
line 39: Next JScrollPane
component object created for JEditorPane
component object, is added to (0,1)th i.e. the 2nd cell from the left, of the first row of the grid.
line 43: Next JScrollPane
component object created for JEditorPane
component object, is added to the grid. Since no cell is specified, the component is added to the next available i.e. 3rd cell of the first row. This is as per the default order of addition described above.
line 47: Next JScrollPane
component object created for JEditorPane
component object, is added to the grid. Since no cell is specified, the component is added to the next available i.e. 1st cell of the 2nd row. This is as per the default order of addition described above.
line 94: One JSplitPane
component object is added to the grid.
line 97: Next JScrollPane
component object created for JEditorPane
component object, is added to the grid. Since no cell is specified, the component is added to the next available as per the default order of addition described above.
6. Summary
This example shows a scenario to use GridLayout
while developing UI. There can numerous such scenarios for use of this. For any further reading, supplied links can be referred.
7. Download the Source Code
This was an example of Java GridLayout.
You can download the full source code of this example here: Swing GridLayout Example