2323public class ProgramWindow {
2424 private final UserAgent userAgent ;
2525 private JLabel fullUserAgentLabel = new JLabel ();
26+ private final JPanel cdSearchPanel = new JPanel ();
27+ private final JLabel searchStatusLabel = new JLabel ("Status: Nothing's going on." );
2628
2729 /**
2830 * Creates a new ProgramWindow and sets up the GUI.
@@ -76,20 +78,20 @@ private JPanel searchPanel() {
7678 JPanel panel = new JPanel ();
7779 panel .setLayout (new BorderLayout ());
7880
79- // Track List panel set up
81+ // Track List panel set- up
8082 JPanel trackListPanel = new JPanel (new BorderLayout ());
8183 trackListPanel .setBorder (BorderFactory .createTitledBorder ("Search Results" ));
8284
8385 // Search table set up
8486 JTable searchTable = new JTable (getCDStubModel ());
8587 JScrollPane trackListScrollPane = new JScrollPane (searchTable );
88+ trackListPanel .add (searchStatusLabel , BorderLayout .NORTH );
8689 trackListPanel .add (trackListScrollPane , BorderLayout .CENTER );
8790
8891 // Add the Track List panel to the main panel
8992 panel .add (trackListPanel , BorderLayout .CENTER );
9093
9194 // CD Search Panel set up
92- JPanel cdSearchPanel = new JPanel ();
9395 cdSearchPanel .setBorder (BorderFactory .createTitledBorder ("Search" ));
9496
9597 JTextField searchField = new JTextField (15 );
@@ -102,26 +104,36 @@ private JPanel searchPanel() {
102104 if (searchTypeComboBox .getSelectedItem () == null ) {
103105 return ;
104106 }
107+ setSearchStatus ("Preforming search..." , "blue" );
105108 if (searchTypeComboBox .getSelectedItem ().equals ("CDStub" )) {
106- MusicBrainzJSONReader reader = sendRequest ("cdstub" , searchField .getText ());
107-
108- // Get CDStubs and set the table model
109- MusicBrainzCDStub [] cdStubs = reader .getCDStubs ();
110- searchTable .setModel (reader .getCDStubsAsTableModel (cdStubs ));
109+ Constants .THREAD_MANAGER .submit (() -> {
110+ MusicBrainzJSONReader reader = sendRequest ("cdstub" , searchField .getText ());
111+
112+ // Get CDStubs and set the table model
113+ MusicBrainzCDStub [] cdStubs = reader .getCDStubs ();
114+ searchTable .setModel (reader .getCDStubsAsTableModel (cdStubs ));
115+ setSearchStatus ("All done!" , "green" );
116+ });
111117 } else if (searchTypeComboBox .getSelectedItem ().equals ("Artist" )) {
112- MusicBrainzJSONReader reader = sendRequest ("artist" , searchField .getText ());
113-
114- // Get Artists and set the table model
115- MusicBrainzArtist [] artists = reader .getArtists ();
116- searchTable .setModel (reader .getArtistsAsTableModel (artists ));
118+ Constants .THREAD_MANAGER .submit (() -> {
119+ MusicBrainzJSONReader reader = sendRequest ("artist" , searchField .getText ());
120+
121+ // Get Artists and set the table model
122+ MusicBrainzArtist [] artists = reader .getArtists ();
123+ searchTable .setModel (reader .getArtistsAsTableModel (artists ));
124+ setSearchStatus ("All done!" , "green" );
125+ });
117126 } else if (searchTypeComboBox .getSelectedItem ().equals ("Release" )) {
118- MusicBrainzJSONReader reader = sendRequest ("release" , searchField .getText ());
119-
120- // Get Releases and set the table model
121- MusicBrainzRelease [] releases = reader .getReleases ();
122- searchTable .setModel (reader .getReleasesAsTableModel (releases ));
127+ Constants .THREAD_MANAGER .submit (() -> {
128+ MusicBrainzJSONReader reader = sendRequest ("release" , searchField .getText ());
129+
130+ // Get Releases and set the table model
131+ MusicBrainzRelease [] releases = reader .getReleases ();
132+ searchTable .setModel (reader .getReleasesAsTableModel (releases ));
133+ setSearchStatus ("All done!" , "green" );
134+ });
123135 } else {
124- // how does this even happen
136+ // how does this even happen?
125137 JOptionPane .showMessageDialog (panel , "Please select a search type." );
126138 }
127139 resizeColumnWidths (searchTable );
@@ -286,15 +298,15 @@ public void changedUpdate(DocumentEvent e) {} // Not used
286298 userAgentPanel .add (fullAgentPanel , BorderLayout .NORTH );
287299 userAgentPanel .add (userAgentInputPanel , BorderLayout .CENTER );
288300
289- // Add sub panels to main panel
301+ // Add subpanels to the main panel
290302 panel .add (userAgentPanel );
291303 panel .add (fontPanel );
292304
293305 return panel ;
294306 }
295307
296308 /**
297- * Helper method to resize a tables columns to fit the largest element.
309+ * Helper method to resize a table column to fit the largest element.
298310 * @param table The table to resize.
299311 */
300312 private void resizeColumnWidths (JTable table ) {
@@ -313,4 +325,8 @@ private void resizeColumnWidths(JTable table) {
313325 tableColumn .setPreferredWidth (preferredWidth + 2 ); // Add padding
314326 }
315327 }
328+
329+ public void setSearchStatus (String status , String color ) {
330+ searchStatusLabel .setText ("<html><font color='" + color + "'>Status: " + status + "</font></html>" );
331+ }
316332}
0 commit comments