Skip to content

Commit e4d9738

Browse files
committed
Package resources into jar
1 parent 225e580 commit e4d9738

File tree

7 files changed

+55
-48
lines changed

7 files changed

+55
-48
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@
22
*.ser
33
datasets/*/
44
screenshots/export/*
5-
.DS_STORE
5+
.DS_STORE
6+
out/*/

compile_and_package_mac_linux.sh

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
#!/bin/bash
22

3+
# Create the output directory if it doesn't exist
4+
mkdir -p out
5+
36
# Compile all Java files in the src directory and its subdirectories
47
javac -d out -cp "libs/*" $(find src -name "*.java")
58

6-
# Package the compiled files into a JAR
9+
# Copy resources to the output directory, excluding unnecessary files
10+
rsync -av --exclude='.DS_Store' resources/ out/
11+
12+
# Package the compiled files and resources into a JAR
713
jar cfe out/JTabViz.jar src.Main -C out .
814

915
# Run the packaged Java application

out/JTabViz.jar

3.66 MB
Binary file not shown.

src/CsvViewer.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ public void loadCsvFile() {
348348
generateClassShapes();
349349
updateSelectedRowsLabel();
350350

351-
toggleButton.setIcon(UIHelper.loadIcon("resources/icons/normalize.png", 40, 40));
351+
toggleButton.setIcon(UIHelper.loadIcon("/icons/normalize.png", 40, 40));
352352
toggleButton.setToolTipText("Normalize");
353353

354354
statsTextArea.setCaretPosition(0);
@@ -466,13 +466,13 @@ public void toggleDataView() {
466466
if (stateManager.isNormalized()) {
467467
tableManager.updateTableData(dataHandler.getOriginalData());
468468
stateManager.setNormalized(false);
469-
toggleButton.setIcon(UIHelper.loadIcon("resources/icons/normalize.png", 40, 40));
469+
toggleButton.setIcon(UIHelper.loadIcon("/icons/normalize.png", 40, 40));
470470
toggleButton.setToolTipText("Normalize");
471471
} else {
472472
dataHandler.normalizeOrDenormalizeData(table, statsTextArea);
473473
tableManager.updateTableData(dataHandler.getNormalizedData());
474474
stateManager.setNormalized(true);
475-
toggleButton.setIcon(UIHelper.loadIcon("resources/icons/denormalize.png", 40, 40));
475+
toggleButton.setIcon(UIHelper.loadIcon("/icons/denormalize.png", 40, 40));
476476
toggleButton.setToolTipText("Default");
477477
}
478478

@@ -863,10 +863,10 @@ public CsvDataHandler getDataHandler() {
863863

864864
public void updateToggleEasyCasesButton(boolean show) {
865865
if (show) {
866-
toggleEasyCasesButton.setIcon(UIHelper.loadIcon("resources/icons/easy.png", 40, 40));
866+
toggleEasyCasesButton.setIcon(UIHelper.loadIcon("/icons/easy.png", 40, 40));
867867
toggleEasyCasesButton.setToolTipText("Show Easy Cases");
868868
} else {
869-
toggleEasyCasesButton.setIcon(UIHelper.loadIcon("resources/icons/uneasy.png", 40, 40));
869+
toggleEasyCasesButton.setIcon(UIHelper.loadIcon("/icons/uneasy.png", 40, 40));
870870
toggleEasyCasesButton.setToolTipText("Show All Cases");
871871
}
872872
}

src/MainMenu.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ public MainMenu() {
1616
setLocationRelativeTo(null);
1717
setLayout(new BorderLayout());
1818

19-
// Banner graphic without padding, resized to 150px tall
20-
JLabel bannerLabel = new JLabel(new ImageIcon("resources/graphics/banner.png"));
19+
ImageIcon bannerIcon = new ImageIcon(getClass().getResource("/graphics/banner.png"));
20+
JLabel bannerLabel = new JLabel(bannerIcon);
2121
bannerLabel.setPreferredSize(new Dimension(getWidth(), 150));
2222
add(bannerLabel, BorderLayout.NORTH);
2323

src/UIHelper.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package src;
22

3+
import javax.imageio.ImageIO;
34
import javax.swing.*;
45
import java.awt.*;
56
import java.awt.event.ActionListener;
6-
import java.io.File;
7+
import java.io.IOException;
8+
import java.io.InputStream;
79

810
public class UIHelper {
911

@@ -15,18 +17,16 @@ public static JTextArea createTextArea(int rows, int columns) {
1517
}
1618

1719
public static ImageIcon loadIcon(String path, int width, int height) {
18-
File iconFile = new File(path);
19-
if (!iconFile.exists()) {
20-
iconFile = new File("icons/missing.png");
21-
}
22-
23-
if (iconFile.exists()) {
24-
ImageIcon icon = new ImageIcon(iconFile.getAbsolutePath());
25-
Image image = icon.getImage();
26-
Image newimg = image.getScaledInstance(width, height, java.awt.Image.SCALE_SMOOTH);
27-
return new ImageIcon(newimg);
28-
} else {
29-
System.err.println("Couldn't find file: " + path);
20+
try (InputStream stream = UIHelper.class.getResourceAsStream(path)) {
21+
if (stream != null) {
22+
Image image = ImageIO.read(stream).getScaledInstance(width, height, Image.SCALE_SMOOTH);
23+
return new ImageIcon(image);
24+
} else {
25+
System.err.println("Couldn't find file: " + path);
26+
return null;
27+
}
28+
} catch (IOException e) {
29+
e.printStackTrace();
3030
return null;
3131
}
3232
}

src/managers/ButtonPanelManager.java

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,11 @@ public JPanel createButtonPanel() {
4545
}
4646

4747
private JButton createLoadButton() {
48-
return UIHelper.createButton("resources/icons/load.png", "Load CSV", e -> csvViewer.loadCsvFile());
48+
return UIHelper.createButton("/icons/load.png", "Load CSV", e -> csvViewer.loadCsvFile());
4949
}
5050

5151
private JButton createToggleButton() {
52-
csvViewer.toggleButton = UIHelper.createButton("resources/icons/normalize.png", "Normalize", e -> {
52+
csvViewer.toggleButton = UIHelper.createButton("/icons/normalize.png", "Normalize", e -> {
5353
if (csvViewer.dataHandler.isDataEmpty()) {
5454
csvViewer.noDataLoadedError();
5555
} else {
@@ -60,7 +60,7 @@ private JButton createToggleButton() {
6060
}
6161

6262
private JButton createHighlightBlanksButton() {
63-
return UIHelper.createButton("resources/icons/highlight.png", "Highlight Blanks", e -> {
63+
return UIHelper.createButton("/icons/highlight.png", "Highlight Blanks", e -> {
6464
if (csvViewer.dataHandler.isDataEmpty()) {
6565
csvViewer.noDataLoadedError();
6666
} else {
@@ -70,7 +70,7 @@ private JButton createHighlightBlanksButton() {
7070
}
7171

7272
private JButton createHeatmapButton() {
73-
return UIHelper.createButton("resources/icons/heatmap.png", "Show Heatmap", e -> {
73+
return UIHelper.createButton("/icons/heatmap.png", "Show Heatmap", e -> {
7474
if (csvViewer.dataHandler.isDataEmpty()) {
7575
csvViewer.noDataLoadedError();
7676
} else {
@@ -80,7 +80,7 @@ private JButton createHeatmapButton() {
8080
}
8181

8282
private JButton createCovarianceMatrixButton() {
83-
return UIHelper.createButton("resources/icons/variance.png", "Show Covariance Matrix", e -> {
83+
return UIHelper.createButton("/icons/variance.png", "Show Covariance Matrix", e -> {
8484
if (csvViewer.dataHandler.isDataEmpty()) {
8585
csvViewer.noDataLoadedError();
8686
} else {
@@ -90,7 +90,7 @@ private JButton createCovarianceMatrixButton() {
9090
}
9191

9292
private JButton createFontSettingsButton() {
93-
return UIHelper.createButton("resources/icons/fontcolor.png", "Font Color", e -> {
93+
return UIHelper.createButton("/icons/fontcolor.png", "Font Color", e -> {
9494
if (csvViewer.dataHandler.isDataEmpty()) {
9595
csvViewer.noDataLoadedError();
9696
} else {
@@ -100,7 +100,7 @@ private JButton createFontSettingsButton() {
100100
}
101101

102102
private JButton createInsertRowButton() {
103-
return UIHelper.createButton("resources/icons/insert.png", "Insert Row", e -> {
103+
return UIHelper.createButton("/icons/insert.png", "Insert Row", e -> {
104104
if (csvViewer.dataHandler.isDataEmpty()) {
105105
csvViewer.noDataLoadedError();
106106
} else {
@@ -110,7 +110,7 @@ private JButton createInsertRowButton() {
110110
}
111111

112112
private JButton createDeleteRowButton() {
113-
return UIHelper.createButton("resources/icons/delete.png", "Delete Row", e -> {
113+
return UIHelper.createButton("/icons/delete.png", "Delete Row", e -> {
114114
if (csvViewer.dataHandler.isDataEmpty()) {
115115
csvViewer.noDataLoadedError();
116116
} else {
@@ -120,7 +120,7 @@ private JButton createDeleteRowButton() {
120120
}
121121

122122
private JButton createCloneRowButton() {
123-
return UIHelper.createButton("resources/icons/clone.png", "Clone Row", e -> {
123+
return UIHelper.createButton("/icons/clone.png", "Clone Row", e -> {
124124
if (csvViewer.dataHandler.isDataEmpty()) {
125125
csvViewer.noDataLoadedError();
126126
} else {
@@ -130,7 +130,7 @@ private JButton createCloneRowButton() {
130130
}
131131

132132
private JButton createExportButton() {
133-
return UIHelper.createButton("resources/icons/export.png", "Export CSV", e -> {
133+
return UIHelper.createButton("/icons/export.png", "Export CSV", e -> {
134134
if (csvViewer.dataHandler.isDataEmpty()) {
135135
csvViewer.noDataLoadedError();
136136
} else {
@@ -140,7 +140,7 @@ private JButton createExportButton() {
140140
}
141141

142142
private JButton createParallelPlotButton() {
143-
return UIHelper.createButton("resources/icons/parallel.png", "Parallel Coordinates Plot", e -> {
143+
return UIHelper.createButton("/icons/parallel.png", "Parallel Coordinates Plot", e -> {
144144
if (csvViewer.dataHandler.isDataEmpty()) {
145145
csvViewer.noDataLoadedError();
146146
} else {
@@ -150,7 +150,7 @@ private JButton createParallelPlotButton() {
150150
}
151151

152152
private JButton createShiftedPairedButton() {
153-
return UIHelper.createButton("resources/icons/shiftedpaired.png", "Shifted Paired Coordinates Plot", e -> {
153+
return UIHelper.createButton("/icons/shiftedpaired.png", "Shifted Paired Coordinates Plot", e -> {
154154
if (csvViewer.dataHandler.isDataEmpty()) {
155155
csvViewer.noDataLoadedError();
156156
} else {
@@ -160,7 +160,7 @@ private JButton createShiftedPairedButton() {
160160
}
161161

162162
private JButton createStaticCircularCoordinatesButton() {
163-
return UIHelper.createButton("resources/icons/staticcircular.png", "Static Circular Coordinates Plot", e -> {
163+
return UIHelper.createButton("/icons/staticcircular.png", "Static Circular Coordinates Plot", e -> {
164164
if (csvViewer.dataHandler.isDataEmpty()) {
165165
csvViewer.noDataLoadedError();
166166
} else {
@@ -170,7 +170,7 @@ private JButton createStaticCircularCoordinatesButton() {
170170
}
171171

172172
private JButton createStarCoordinatesButton() {
173-
return UIHelper.createButton("resources/icons/star.png", "Star Coordinates Plot", e -> {
173+
return UIHelper.createButton("/icons/star.png", "Star Coordinates Plot", e -> {
174174
if (csvViewer.dataHandler.isDataEmpty()) {
175175
csvViewer.noDataLoadedError();
176176
} else {
@@ -180,7 +180,7 @@ private JButton createStarCoordinatesButton() {
180180
}
181181

182182
private JButton createCovarianceSortButton() {
183-
return UIHelper.createButton("resources/icons/sort.png", "Sort Columns by Covariance", e -> {
183+
return UIHelper.createButton("/icons/sort.png", "Sort Columns by Covariance", e -> {
184184
if (csvViewer.dataHandler.isDataEmpty()) {
185185
csvViewer.noDataLoadedError();
186186
} else {
@@ -190,7 +190,7 @@ private JButton createCovarianceSortButton() {
190190
}
191191

192192
private JButton createClassColorButton() {
193-
return UIHelper.createButton("resources/icons/classcolor.png", "Toggle Class Colors", e -> {
193+
return UIHelper.createButton("/icons/classcolor.png", "Toggle Class Colors", e -> {
194194
if (csvViewer.dataHandler.isDataEmpty()) {
195195
csvViewer.noDataLoadedError();
196196
} else {
@@ -200,7 +200,7 @@ private JButton createClassColorButton() {
200200
}
201201

202202
private JButton createSetClassColorsButton() {
203-
return UIHelper.createButton("resources/icons/setcolor.png", "Set Class Colors", e -> {
203+
return UIHelper.createButton("/icons/setcolor.png", "Set Class Colors", e -> {
204204
if (csvViewer.dataHandler.isDataEmpty()) {
205205
csvViewer.noDataLoadedError();
206206
} else {
@@ -210,7 +210,7 @@ private JButton createSetClassColorsButton() {
210210
}
211211

212212
private JButton createRuleTesterButton() {
213-
return UIHelper.createButton("resources/icons/rule_tester.png", "Rule Tester", e -> {
213+
return UIHelper.createButton("/icons/rule_tester.png", "Rule Tester", e -> {
214214
if (csvViewer.dataHandler.isDataEmpty()) {
215215
csvViewer.noDataLoadedError();
216216
} else {
@@ -220,17 +220,17 @@ private JButton createRuleTesterButton() {
220220
}
221221

222222
private JButton createToggleTrigonometricButton() {
223-
csvViewer.toggleTrigonometricButton = UIHelper.createButton("resources/icons/trigon.png", "Insert Trig Columns", null);
223+
csvViewer.toggleTrigonometricButton = UIHelper.createButton("/icons/trigon.png", "Insert Trig Columns", null);
224224
csvViewer.toggleTrigonometricButton.addActionListener(e -> {
225225
if (csvViewer.dataHandler.isDataEmpty()) {
226226
csvViewer.noDataLoadedError();
227227
} else {
228228
csvViewer.toggleTrigonometricColumns();
229229
if (csvViewer.areDifferenceColumnsVisible()) {
230-
csvViewer.toggleTrigonometricButton.setIcon(UIHelper.loadIcon("resources/icons/trigoff.png", 40, 40));
230+
csvViewer.toggleTrigonometricButton.setIcon(UIHelper.loadIcon("/icons/trigoff.png", 40, 40));
231231
csvViewer.toggleTrigonometricButton.setToolTipText("Remove Trig Columns");
232232
} else {
233-
csvViewer.toggleTrigonometricButton.setIcon(UIHelper.loadIcon("resources/icons/trigon.png", 40, 40));
233+
csvViewer.toggleTrigonometricButton.setIcon(UIHelper.loadIcon("/icons/trigon.png", 40, 40));
234234
csvViewer.toggleTrigonometricButton.setToolTipText("Insert Trig Columns");
235235
}
236236
}
@@ -239,17 +239,17 @@ private JButton createToggleTrigonometricButton() {
239239
}
240240

241241
private JButton createToggleEasyCasesButton() {
242-
csvViewer.toggleEasyCasesButton = UIHelper.createButton("resources/icons/easy.png", "Show Easy Cases", null);
242+
csvViewer.toggleEasyCasesButton = UIHelper.createButton("/icons/easy.png", "Show Easy Cases", null);
243243
csvViewer.toggleEasyCasesButton.addActionListener(e -> {
244244
if (csvViewer.dataHandler.isDataEmpty()) {
245245
csvViewer.noDataLoadedError();
246246
} else {
247247
csvViewer.toggleEasyCases();
248248
if (csvViewer.hasHiddenRows()) {
249-
csvViewer.toggleEasyCasesButton.setIcon(UIHelper.loadIcon("resources/icons/uneasy.png", 40, 40));
249+
csvViewer.toggleEasyCasesButton.setIcon(UIHelper.loadIcon("/icons/uneasy.png", 40, 40));
250250
csvViewer.toggleEasyCasesButton.setToolTipText("Show All Cases");
251251
} else {
252-
csvViewer.toggleEasyCasesButton.setIcon(UIHelper.loadIcon("resources/icons/easy.png", 40, 40));
252+
csvViewer.toggleEasyCasesButton.setIcon(UIHelper.loadIcon("/icons/easy.png", 40, 40));
253253
csvViewer.toggleEasyCasesButton.setToolTipText("Show Non-Easy Cases");
254254
}
255255
}
@@ -258,7 +258,7 @@ private JButton createToggleEasyCasesButton() {
258258
}
259259

260260
private JButton createRuleOverlayButton() {
261-
return UIHelper.createButton("resources/icons/ruleplot.png", "Rule Overlay Plot", e -> {
261+
return UIHelper.createButton("/icons/ruleplot.png", "Rule Overlay Plot", e -> {
262262
if (csvViewer.dataHandler.isDataEmpty()) {
263263
csvViewer.noDataLoadedError();
264264
} else {
@@ -268,7 +268,7 @@ private JButton createRuleOverlayButton() {
268268
}
269269

270270
private JButton createLinearCombinationButton() {
271-
return UIHelper.createButton("resources/icons/combo.png", "Insert Linear Combination Column", e -> {
271+
return UIHelper.createButton("/icons/combo.png", "Insert Linear Combination Column", e -> {
272272
if (csvViewer.dataHandler.isDataEmpty()) {
273273
csvViewer.noDataLoadedError();
274274
} else {

0 commit comments

Comments
 (0)