1515import javax .swing .*;
1616import javax .swing .event .DocumentEvent ;
1717import javax .swing .event .DocumentListener ;
18+ import javax .swing .table .DefaultTableCellRenderer ;
1819import javax .swing .table .DefaultTableModel ;
1920import javax .swing .table .TableColumn ;
2021import java .awt .*;
@@ -132,9 +133,11 @@ public void mouseClicked(MouseEvent e) {
132133 clearIdList ();
133134 String finalSelectedItem = selectedItem ;
134135 Constants .THREAD_MANAGER .submit (() -> {
136+ int [] columnsToHighlight = null ;
135137 MusicBrainzJSONReader reader = new MusicBrainzJSONReader (sendRequest (finalSelectedItem .toLowerCase (Locale .ROOT ), searchField .getText (), false ));
136138 switch (finalSelectedItem ) {
137139 case "CDStub" -> {
140+ columnsToHighlight = new int []{0 , 1 };
138141 // Get CDStubs and set the table model
139142 MusicBrainzCDStub [] cdStubs = reader .getCDStubs ();
140143 for (MusicBrainzCDStub cdStub : cdStubs ) {
@@ -153,6 +156,7 @@ public void mouseClicked(MouseEvent e) {
153156 searchTable .setModel (reader .getArtistsAsTableModel (artists ));
154157 }
155158 case "Release" -> {
159+ columnsToHighlight = new int []{0 , 1 };
156160 // Get Releases and set the table model
157161 MusicBrainzRelease [] releases = reader .getReleases ();
158162 for (MusicBrainzRelease release : releases ) {
@@ -163,8 +167,12 @@ public void mouseClicked(MouseEvent e) {
163167 }
164168 default -> JOptionPane .showMessageDialog (panel , "Please select a search type." );
165169 }
170+ if (columnsToHighlight != null ) {
171+ for (int column : columnsToHighlight ) {
172+ searchTable .getColumnModel ().getColumn (column ).setCellRenderer (new LightBlueColumnRenderer ());
173+ }
174+ }
166175 });
167-
168176 resizeColumnWidths (searchTable );
169177 });
170178
@@ -176,6 +184,9 @@ public void mouseClicked(MouseEvent e) {
176184 // Add the CD Search panel to the main panel
177185 panel .add (cdSearchPanel , BorderLayout .SOUTH );
178186
187+ // Add a label that informs the user about ClickSearch.
188+ panel .add (new JLabel ("Click a row in a column that is highlighted in light blue to search or add something to the final label." ), BorderLayout .NORTH );
189+
179190 return panel ;
180191 }
181192
@@ -402,7 +413,7 @@ private void clickSearch(int row, int col, JTable table) {
402413
403414 try {
404415 if (col == 0 ) {
405- response = sendRequest (typeOfTable .equals ("Disc Name" ) ? "tracks" : "release" , idList .get (row ), typeOfTable . equals ( "Disc Name" ) );
416+ response = sendRequest (typeOfTable .equals ("Disc Name" ) ? "tracks" : "release" , idList .get (row ), true );
406417 MusicBrainzJSONReader reader = new MusicBrainzJSONReader (response );
407418 model = reader .getTracksAsTableModel (typeOfTable .equals ("Disc Name" ) ? reader .getTracks () : reader .getReleaseTracks ());
408419 String date = typeOfTable .equals ("Release Name" ) ? table .getValueAt (row , 3 ).toString () : null ;
@@ -415,7 +426,7 @@ private void clickSearch(int row, int col, JTable table) {
415426 createArtistDialog (model );
416427 }
417428 } catch (Exception e ) {
418- JOptionPane .showMessageDialog (null , "An error occurred while processing the request." , "Error" , JOptionPane .ERROR_MESSAGE );
429+ JOptionPane .showMessageDialog (null , "An error occurred while processing the request. More info: " + e , "Error" , JOptionPane .ERROR_MESSAGE );
419430 setSearchStatus ("Error" , "red" );
420431 }
421432 });
@@ -480,4 +491,17 @@ private void createArtistDialog(DefaultTableModel model) {
480491 dialog .pack ();
481492 dialog .setVisible (true );
482493 }
494+
495+ /**
496+ * A custom table cell renderer that sets the background color of the cell to light blue.
497+ * Used for columns that support ClickSearch.
498+ */
499+ static class LightBlueColumnRenderer extends DefaultTableCellRenderer {
500+ @ Override
501+ public Component getTableCellRendererComponent (JTable table , Object value , boolean isSelected , boolean hasFocus , int row , int column ) {
502+ Component cell = super .getTableCellRendererComponent (table , value , isSelected , hasFocus , row , column );
503+ cell .setBackground (new Color (173 , 216 , 230 )); // Light blue color
504+ return cell ;
505+ }
506+ }
483507}
0 commit comments