Todos in a Java Swing JTable
May 10, 2021
This is an example Java GUI application. The application maintains a set of todos in a table. There are functions to create a new todo, save an updated todo, and delete a todo. You can also print all todos to the console and store the todos in a file.
The completed application's GUI looks like this:
The GUI for this application is built using the Java Swing and Awt classes. The table where the todos are displayed is a
JTable; it has two columns, the todo's name (or description text) and the done (or is completed, a
boolean field) rendered as a
The table data is managed using a table model. The model manages updates in the table UI after CRUD (Create, Read, Update and Delete) operations on the table data. For example, after a todo is created the model is updated, which in turn is reflected in the table UI. Other functions include the rendering of the check box in the table UI and maintaining the todo data shown in the table.
The table model is an instance of
javax.swing.table.AbstractTableModel, an abstract class; this is extended to create the class customized for this application,
TodoTableModel.java. Other classes in the application are:
MainWindow.javahas all the GUI creation code and the user actions are handled from this class. This is also the application's starter program.
Todo.javais the POJO class representing a todo.
FileUtils.javaclass has the todo file read and write methods.
The code is written using Java SE 8. The Java source code for the application can be browsed or downloaded from the Browse or Download section below.
2. Components in the GUI
The table is built using the
JTable and is enclosed in a
JScrollerPane for vertical scrolling of the table rows. There is a
JTextField where the selected todo’s name is displayed, and can be edited (to be saved). There are buttons (
JButton component) to create a new todo, save a modified todo's name, delete a todo, print the todos to the console and store todos to a file. There is a status message displayed at the bottom of the window; this is a
These components are placed within their respective
JPanel containers, which in turn are placed within the main window of the application, a
There are various attributes set for components: fonts, component size, spacing within and between the components, etc., to get the desired look and feel.
3. GUI Layout
There is a main panel and individual containers for each or set of components. The containers are
JPanels except for the table.
The main panel, has a
BoxLayout with Y_AXIS and specifies the components are to be laid out vertically. This allows all the components - table, text field, buttons (together) and the message - are placed in a vertical stack. The main panel in turn is placed within the
JFrame. Layouts allow place the components within the application window as required.
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
JTable is within a scrolling enabled container, the
JScrollPane. Then, the text field is placed within its own panel. The buttons are placed in a panel with
FlowLayout which allows buttons to be placed one after the other horizontally. The alignment is set as CENTER so that the panel is centred horizontally within the main panel.
Finally, the message
JLabel is in its own panel.
To create spacing in between, the components are separated with borders. Borders can be of different types - an empty border with space size is used to specify the space (or gap) between components. For example, the main panel has an empty border of size 10. This creates an empty space on all sides between the components and the main window border.
mainPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
4. Application Functions
The todos in this application are stored in a text file.
At the start of the application all the todos from the file are read and displayed in the table. After that, the user can perform any actions mostly by selecting the table row (a todo) and clicking the buttons for respective functionality.
The button click and the table row selection have listeners which perform some logic based upon the action on the component; for example when a row (a todo) is selected in the table, the todo's name is displayed in the text field. Or, when the delete button is pressed, the selected todo in the table is deleted.
In addition to the GUI component listeners, there is a listener for the table model; this is triggered when there are changes in the table model due to new, updated or deleted data.
5. Browse or Download
Browse the Java source code online or download to your machine. You can compile and run the code - requires Java SE 8 or higher.
5.2. DownloadReturn to top
Comments are welcome. Please note that comments are moderated.
Email to: info(at)javaquizplayer(dot)com.