From 6631740d98c835361aea3b70d8870f8a2903b08d Mon Sep 17 00:00:00 2001 From: Reinhard Pointner Date: Thu, 12 Jul 2012 11:23:23 +0000 Subject: [PATCH] + support all rename actions (move, copy, hardlink, ...) in GUI as well + include/exclude extension mode evolved to Relative Name / Absolute Path modes --- .../filebot/{cli => }/RenameAction.java | 2 +- .../{cli => }/StandardRenameAction.java | 2 +- .../filebot/cli/CmdlineOperations.java | 2 + .../filebot/resources/action.rename.small.png | Bin 273 -> 0 bytes .../filebot/resources/action.settings.png | Bin 0 -> 947 bytes .../filebot/resources/rename.action.copy.png | Bin 0 -> 498 bytes .../resources/rename.action.hardlink.png | Bin 0 -> 679 bytes .../resources/rename.action.keeplink.png | Bin 0 -> 655 bytes .../filebot/resources/rename.action.move.png | Bin 0 -> 883 bytes .../resources/rename.action.symlink.png | Bin 0 -> 570 bytes .../filebot/ui/rename/FileNameFormatter.java | 28 +++++---- .../filebot/ui/rename/RenameAction.java | 21 +++++-- .../ui/rename/RenameListCellRenderer.java | 26 +++++++- .../filebot/ui/rename/RenamePanel.java | 58 +++++++++++++----- .../net/sourceforge/tuned/ui/ActionPopup.java | 31 +++++----- 15 files changed, 119 insertions(+), 51 deletions(-) rename source/net/sourceforge/filebot/{cli => }/RenameAction.java (75%) rename source/net/sourceforge/filebot/{cli => }/StandardRenameAction.java (98%) delete mode 100644 source/net/sourceforge/filebot/resources/action.rename.small.png create mode 100644 source/net/sourceforge/filebot/resources/action.settings.png create mode 100644 source/net/sourceforge/filebot/resources/rename.action.copy.png create mode 100644 source/net/sourceforge/filebot/resources/rename.action.hardlink.png create mode 100644 source/net/sourceforge/filebot/resources/rename.action.keeplink.png create mode 100644 source/net/sourceforge/filebot/resources/rename.action.move.png create mode 100644 source/net/sourceforge/filebot/resources/rename.action.symlink.png diff --git a/source/net/sourceforge/filebot/cli/RenameAction.java b/source/net/sourceforge/filebot/RenameAction.java similarity index 75% rename from source/net/sourceforge/filebot/cli/RenameAction.java rename to source/net/sourceforge/filebot/RenameAction.java index 8157f17b..75589ac5 100644 --- a/source/net/sourceforge/filebot/cli/RenameAction.java +++ b/source/net/sourceforge/filebot/RenameAction.java @@ -1,5 +1,5 @@ -package net.sourceforge.filebot.cli; +package net.sourceforge.filebot; import java.io.File; diff --git a/source/net/sourceforge/filebot/cli/StandardRenameAction.java b/source/net/sourceforge/filebot/StandardRenameAction.java similarity index 98% rename from source/net/sourceforge/filebot/cli/StandardRenameAction.java rename to source/net/sourceforge/filebot/StandardRenameAction.java index 3725e488..8127f5bb 100644 --- a/source/net/sourceforge/filebot/cli/StandardRenameAction.java +++ b/source/net/sourceforge/filebot/StandardRenameAction.java @@ -1,5 +1,5 @@ -package net.sourceforge.filebot.cli; +package net.sourceforge.filebot; import java.io.File; diff --git a/source/net/sourceforge/filebot/cli/CmdlineOperations.java b/source/net/sourceforge/filebot/cli/CmdlineOperations.java index 68625457..b1e896d4 100644 --- a/source/net/sourceforge/filebot/cli/CmdlineOperations.java +++ b/source/net/sourceforge/filebot/cli/CmdlineOperations.java @@ -46,6 +46,8 @@ import java.util.regex.Pattern; import net.sourceforge.filebot.Analytics; import net.sourceforge.filebot.HistorySpooler; import net.sourceforge.filebot.MediaTypes; +import net.sourceforge.filebot.RenameAction; +import net.sourceforge.filebot.StandardRenameAction; import net.sourceforge.filebot.WebServices; import net.sourceforge.filebot.archive.Archive; import net.sourceforge.filebot.archive.FileMapper; diff --git a/source/net/sourceforge/filebot/resources/action.rename.small.png b/source/net/sourceforge/filebot/resources/action.rename.small.png deleted file mode 100644 index 4e3688edc88c10d2f0e31198d0b17303bc1d223b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 273 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmUzPnffIy#(?lOI#yL zg7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+5i?8!V{ znjV^ye=2;qm;P{$`s;H$`x~a}R(xgP|G$RoO>~FD8I7fnS&nXWFMPEjPiNb7^=IwB zO%ASl$t*T|^U-%%8&{}vv|YWQef;Fc%Euzc)I$ztaD0e0suWxYs>%u diff --git a/source/net/sourceforge/filebot/resources/action.settings.png b/source/net/sourceforge/filebot/resources/action.settings.png new file mode 100644 index 0000000000000000000000000000000000000000..31b135da9282c58947c0154e364224456ef6d545 GIT binary patch literal 947 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4(FKV6O6XaSW-Lla#OkB*pOme^QI# zl`B_v?A^PU`RI`&Irg=`z9b#*lQlj!-~PW$EVH_B^Be(f=KGuH^W6V$Y+%C((bVYq z;nSzAjLgi?>dMN@f`S5rj_z)6`?^0C&(F>_w@=85kdPFKerxHyHgu=Rv-v-Z^3MI7 zzZs&rY4#Z)SifL_z`YwcDqbD$m;Zl%Z}s=<2M;PToGiMjm)!RAzxb*@f9)L~{_jm$ zH~Y^T9yN$t85|k*{b%Ckf#cdlup&hM1+M3FcKb2$cvZO<7toOypc>nOvVZ+{qWBa8xh zje(1cOQ*ZLdxeFCg*GcIE5n5g7Z~n8e$2qj!Tt05qLSN{N&Fg&)(R{jV>X_Ac{hI7 z-@cE(8CC zIZt-K?fz-o{{P=nZZA2_*uY>6#$>EC^t8xDL=NKDj+*x96hWX_y9tOm?3E-pbp9X~F{oX|XTLLyREtt@@j znm6qwjE$dzbaakEmG8cH@L=MtCnqPb@9OS0H#9KNc*r3iCz$puK-=%!OD7+neZWA9 zfhaDyv{H~kfrnv($2{8`^~yEk42NSwRk>Z3%9ZH&u$bLrm(18l*+}S4tk-SEw(HMMH$UOFgT8OyWIuox(>z|!eNT?Q)#FJN+p=4fyzsz3(&M5 z1Oj8QEH>2c<<$iq9`D@|1fH*+ou9fEhcV03wkV2NSzd)@nNYt}lHgoRaN9}vHG1pg5Cj3DD1s1zdc6*S;N$b%7N-)ik literal 0 HcmV?d00001 diff --git a/source/net/sourceforge/filebot/resources/rename.action.hardlink.png b/source/net/sourceforge/filebot/resources/rename.action.hardlink.png new file mode 100644 index 0000000000000000000000000000000000000000..8679c4b5c2e3a149b69397e52ff590cd6dfad974 GIT binary patch literal 679 zcmV;Y0$BZtP)lI$JMDWVR3!6@-^ZR^0hgrbsbb{mYc#Ff~ zaEq6h7tG~UDiykfVW_fn~}VltVi=>K&uQzDT-rBZ>xU=T^C(`9175WnkmI+)F7 zAd|^%P4|tsAB{$!(P+T!b|dH$dtBz4%_gB63ncKeA(q}^@@i^YNr5{l4F%)(iC zhG(AVL8Vd=OB@i!>3F~bCW$DEM4|@4j=<;gCr+WKzZym|j?YHA+l_EP7bFIf1E~S2MKQq0 z$cW9y$ER!J#EJi3ym;~d?%lip4<0=Dzp=6LUUhZ#p_?~v{s4&`IdbGbNDW9WNDtfq zLqkKq;^N{DSFc`u7ZDM$&D-1iPikuF|4EZ3{jaR7{10M-#6WT@R;+jkQVY_9?1HYQ zrl#+cCr?iI_xIVNnQjsGCEAU$vcG=ad^ z*Y|pFZ}0n6t5&^Tw{G44{H3=4a~E0sPhVj2KWVPv|C;ro|5u%!_`hVe|9{s$iGP~f z8d`7z)YR0NfzCGY^76W$l9KWzJ3IS(_G0t@8_rGpzxM1Du*MaqC;XqVr{w>_<6ZwV zmb(2nZD;?j+sw#_Gk%kS{sn37+m-*nb4T|7)@^D38#X8YZ`zvvf5xHa|1k?}{;SqA z{KRQM^lZ)lD^E@Mzw|`!|Aoi8{?9ww0W>7*|MWvm|I?Ow{8y}HxGr7Ez=_j4b?z7aYu(NNH*UVw|7iys{wFPV`!8S1a8a_7ft{qJtliA`I)0(^fB9;LGeFI3 pB$Rr>${ literal 0 HcmV?d00001 diff --git a/source/net/sourceforge/filebot/resources/rename.action.move.png b/source/net/sourceforge/filebot/resources/rename.action.move.png new file mode 100644 index 0000000000000000000000000000000000000000..ed7849b4b62eed0910b666d92d0ba6368f64839b GIT binary patch literal 883 zcmYk44MXR6vsYDD z&-{fDy2Mo{q)t_*Ret+nXxvk^$NI!m#DDpV^Ldb_P_f9;usOwcsAM0VS%G3sIqG9> z7%$K1(2efY^Sq19Bg1s#_vXDrjP1g$RK|3PVS}RonP7eD;A`qmY_E9~A3@sIsr8}S zkWe2&N)m_dL%WXIk(`|S1|2Y5>+*X_W14#V8Oi?B?3a#iLrvrOzx7Tba=m!g*!4QI zq7xw%7Z6_v?!gEfYVKq|J@&UICAHYyg~J+~BU)z)29fjBj(?+^0`&?FEU{hRpksra zSi^#wrNzD@LP{_%k2Up$Snz zF+jb2)du327yLuLuv*pwvGD{@QtTE*K!kz-xtst(>Vqj0Cj*(|S4AqLs_J)k@fhR( z57pQ4a_D_spL?FHH}3r~3Gze&mZfBZSJDkWVi5e~Fo47hU*RE0NGxI;Kw=sy$Tv-o ztljo8|36ft(0ci;gZhSmi1LakR&@q8_j_G1M)!a;0zit@QBndc#6$@|5CH@N7!Z(P zC`A836=N&;O+4=<<%$&#pU?GBS`%aOGOTL>!&u50)=ROh#lo^C6U!RJF=yGd&DS*pGX%^~(<-qbpFBP*;K%w%A_P)O?!~#Vdl*A~_RMaJeHZc^62(la$ zXNk(f!J;Kx`k;bWQJvnEklKv4E*yUMoqNvtUEX^F0D`|j@Q(r{5=p1oY+msBe7DJD z5^lHq%4)R^@aW?E8gVou4QYP_h{fV|l}fb|4u?^%*HNq0P$(4O@pvv=E?2Qytv(Z1 zDwRMQ(vqhcAQFj2>~{NorBb;y7z}$#rSi>WG9eO)!0B{?dg5r7N~NwyOP=o=ta!a% zE*g!p8jYqyDwRIw^LdoZWfY4=WHK2LM>EopmORY>hGAw|mc5I|PN#3O*(?%?1Z*}N91cgL4{iEji;aEEtZ88I z%HD_Pm~b;dC=|BwEA}fCic6!>_++tII36#0y?%nn(Cp&Gi)U*JyQeW6UFQ%wFhd_= zFktBpwDhgV{lnb$$vU>rBA^N!nh-iRQgVr8yH8%}^ zZn9za?@#`2175f^8t6qZXKdU|Cq1|P4!%N`c|6eCU*|IMpHVxOJgs;lasU7T07*qo IM6N<$g1 match) { - return match.getValue() instanceof File || match.getValue() instanceof FileInfo; + return match.getValue() instanceof File || match.getValue() instanceof FileInfo || match.getValue() instanceof String; } - + @Override public String preview(Match match) { return format(match); } - + @Override public String format(Match match) { - if (match.getValue() instanceof File) { - File file = (File) match.getValue(); + Object value = match.getValue(); + + if (value instanceof File) { + File file = (File) value; return preserveExtension ? FileUtilities.getName(file) : file.getName(); } - if (match.getValue() instanceof FileInfo) { - FileInfo file = (FileInfo) match.getValue(); + if (value instanceof FileInfo) { + FileInfo file = (FileInfo) value; return preserveExtension ? file.getName() : file.getPath(); } + if (value instanceof String) { + return preserveExtension ? FileUtilities.getNameWithoutExtension(value.toString()) : value.toString(); + } + // cannot format value - throw new IllegalArgumentException("Illegal value: " + match.getValue()); + throw new IllegalArgumentException("Illegal value: " + value); } } diff --git a/source/net/sourceforge/filebot/ui/rename/RenameAction.java b/source/net/sourceforge/filebot/ui/rename/RenameAction.java index b24e4d61..39a3dde7 100644 --- a/source/net/sourceforge/filebot/ui/rename/RenameAction.java +++ b/source/net/sourceforge/filebot/ui/rename/RenameAction.java @@ -4,7 +4,6 @@ package net.sourceforge.filebot.ui.rename; import static java.util.Collections.*; import static net.sourceforge.filebot.ui.NotificationLogging.*; -import static net.sourceforge.tuned.FileUtilities.*; import static net.sourceforge.tuned.ui.TunedUtilities.*; import java.awt.Cursor; @@ -33,6 +32,7 @@ import javax.swing.SwingWorker; import net.sourceforge.filebot.Analytics; import net.sourceforge.filebot.HistorySpooler; import net.sourceforge.filebot.ResourceManager; +import net.sourceforge.filebot.StandardRenameAction; import net.sourceforge.tuned.ui.ProgressDialog; import net.sourceforge.tuned.ui.ProgressDialog.Cancellable; import net.sourceforge.tuned.ui.SwingWorkerPropertyChangeAdapter; @@ -40,15 +40,21 @@ import net.sourceforge.tuned.ui.SwingWorkerPropertyChangeAdapter; class RenameAction extends AbstractAction { + public static final String RENAME_ACTION = "RENAME_ACTION"; + private final RenameModel model; public RenameAction(RenameModel model) { this.model = model; - + resetValues(); + } + + + public void resetValues() { + putValue(RENAME_ACTION, StandardRenameAction.MOVE); putValue(NAME, "Rename"); putValue(SMALL_ICON, ResourceManager.getIcon("action.rename")); - putValue(SHORT_DESCRIPTION, "Rename files"); } @@ -62,7 +68,7 @@ class RenameAction extends AbstractAction { Map renameMap = checkRenamePlan(validate(model.getRenameMap(), window)); window.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - RenameJob renameJob = new RenameJob(renameMap); + RenameJob renameJob = new RenameJob(renameMap, (StandardRenameAction) getValue(RENAME_ACTION)); renameJob.execute(); try { @@ -192,11 +198,14 @@ class RenameAction extends AbstractAction { protected class RenameJob extends SwingWorker, Void> implements Cancellable { + private final StandardRenameAction action; + private final Map renameMap; private final Map renameLog; - public RenameJob(Map renameMap) { + public RenameJob(Map renameMap, StandardRenameAction action) { + this.action = action; this.renameMap = synchronizedMap(renameMap); this.renameLog = synchronizedMap(new LinkedHashMap()); } @@ -213,7 +222,7 @@ class RenameAction extends AbstractAction { firePropertyChange("currentFile", mapping.getKey(), mapping.getValue()); // rename file, throw exception on failure - moveRename(mapping.getKey(), mapping.getValue()); + action.rename(mapping.getKey(), mapping.getValue()); // remember successfully renamed matches for history entry and possible revert renameLog.put(mapping.getKey(), mapping.getValue()); diff --git a/source/net/sourceforge/filebot/ui/rename/RenameListCellRenderer.java b/source/net/sourceforge/filebot/ui/rename/RenameListCellRenderer.java index 909ece95..50aaba7b 100644 --- a/source/net/sourceforge/filebot/ui/rename/RenameListCellRenderer.java +++ b/source/net/sourceforge/filebot/ui/rename/RenameListCellRenderer.java @@ -89,12 +89,20 @@ class RenameListCellRenderer extends DefaultFancyListCellRenderer { if (renameModel.preserveExtension()) { setText(FileUtilities.getName(file)); } else { - setText(file.getName()); + setText(file.getAbsolutePath()); } } else if (value instanceof FormattedFuture) { // display progress icon FormattedFuture formattedFuture = (FormattedFuture) value; - setText(formattedFuture.isDone() && !formattedFuture.isCancelled() ? formattedFuture.toString() : formattedFuture.preview()); + + if (!renameModel.preserveExtension() && formattedFuture.isDone() && renameModel.hasComplement(index)) { + // absolute path mode + File targetDir = renameModel.getMatch(index).getCandidate().getParentFile(); + setText(resolveAbsolutePath(targetDir, formattedFuture.toString())); + } else { + // relative name mode + setText(formattedFuture.isDone() && !formattedFuture.isCancelled() ? formattedFuture.toString() : formattedFuture.preview()); + } switch (formattedFuture.getState()) { case PENDING: @@ -128,6 +136,20 @@ class RenameListCellRenderer extends DefaultFancyListCellRenderer { } + protected String resolveAbsolutePath(File targetDir, String path) { + File f = new File(path); + if (!f.isAbsolute()) { + f = new File(targetDir, path); // resolve path against target folder + } + + try { + return f.getCanonicalPath(); + } catch (Exception e) { + return f.getAbsolutePath(); + } + } + + protected float getMatchProbablity(Match match) { if (match.getValue() instanceof Episode) { float f = verificationMetric().getSimilarity(match.getValue(), match.getCandidate()); diff --git a/source/net/sourceforge/filebot/ui/rename/RenamePanel.java b/source/net/sourceforge/filebot/ui/rename/RenamePanel.java index 237bd253..794f36ae 100644 --- a/source/net/sourceforge/filebot/ui/rename/RenamePanel.java +++ b/source/net/sourceforge/filebot/ui/rename/RenamePanel.java @@ -16,6 +16,7 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; import java.util.ArrayList; +import java.util.EnumSet; import java.util.LinkedList; import java.util.List; import java.util.Locale; @@ -46,6 +47,7 @@ import net.sourceforge.filebot.History; import net.sourceforge.filebot.HistorySpooler; import net.sourceforge.filebot.ResourceManager; import net.sourceforge.filebot.Settings; +import net.sourceforge.filebot.StandardRenameAction; import net.sourceforge.filebot.WebServices; import net.sourceforge.filebot.similarity.Match; import net.sourceforge.filebot.ui.Language; @@ -153,13 +155,19 @@ public class RenamePanel extends JComponent { } }); - // create settings popup - final Action settingsPopupAction = new ShowPopupAction("Options", ResourceManager.getIcon("action.report")); - JButton settingsButton = createImageButton(settingsPopupAction); - settingsButton.setAction(openHistoryAction); + namesList.getListComponent().setComponentPopupMenu(fetchPopup); + fetchButton.setComponentPopupMenu(fetchPopup); + + // settings popup and button ActionPopup settingsPopup = createSettingsPopup(); + final Action settingsPopupAction = new ShowPopupAction("Settings", ResourceManager.getIcon("action.settings")); + JButton settingsButton = createImageButton(settingsPopupAction); + settingsButton.setComponentPopupMenu(settingsPopup); renameButton.setComponentPopupMenu(settingsPopup); - filesList.getButtonPanel().add(settingsButton, "gap 0"); + namesList.getButtonPanel().add(settingsButton, "gap indent"); + + // open rename log button + filesList.getButtonPanel().add(createImageButton(openHistoryAction), "gap 0"); setLayout(new MigLayout("fill, insets dialog, gapx 10px", "[fill][align center, pref!][fill]", "align 33%")); @@ -276,16 +284,18 @@ public class RenamePanel extends JComponent { protected ActionPopup createSettingsPopup() { - ActionPopup actionPopup = new ActionPopup("Rename Options", ResourceManager.getIcon("action.rename.small")); + ActionPopup actionPopup = new ActionPopup("Rename Options", ResourceManager.getIcon("action.settings")); - actionPopup.addDescription(new JLabel("Extension:")); - - actionPopup.add(new OverrideExtensionAction(false, "Preserve", ResourceManager.getIcon("action.extension.preserve"))); - actionPopup.add(new OverrideExtensionAction(true, "Override", ResourceManager.getIcon("action.extension.override"))); + actionPopup.addDescription(new JLabel("Mode:")); + actionPopup.add(new SetRenameMode(false, "Relative Name", ResourceManager.getIcon("action.extension.preserve"))); + actionPopup.add(new SetRenameMode(true, "Absolute Path", ResourceManager.getIcon("action.extension.override"))); actionPopup.addSeparator(); - actionPopup.addDescription(new JLabel("History:")); - actionPopup.add(openHistoryAction); + + actionPopup.addDescription(new JLabel("Action:")); + for (StandardRenameAction action : EnumSet.of(StandardRenameAction.MOVE, StandardRenameAction.COPY, StandardRenameAction.KEEPLINK, StandardRenameAction.SYMLINK, StandardRenameAction.HARDLINK)) { + actionPopup.add(new SetRenameAction(action, action.toString().toLowerCase(), ResourceManager.getIcon("rename.action." + action.toString().toLowerCase()))); + } return actionPopup; } @@ -328,12 +338,12 @@ public class RenamePanel extends JComponent { }; - protected class OverrideExtensionAction extends AbstractAction { + protected class SetRenameMode extends AbstractAction { private final boolean activate; - private OverrideExtensionAction(boolean activate, String name, Icon icon) { + private SetRenameMode(boolean activate, String name, Icon icon) { super(name, icon); this.activate = activate; } @@ -352,6 +362,26 @@ public class RenamePanel extends JComponent { } + protected class SetRenameAction extends AbstractAction { + + private final StandardRenameAction action; + + + public SetRenameAction(StandardRenameAction action, String name, Icon icon) { + super(name, icon); + this.action = action; + } + + + @Override + public void actionPerformed(ActionEvent evt) { + renameAction.putValue(RenameAction.RENAME_ACTION, action); + renameAction.putValue(NAME, this.getValue(NAME)); + renameAction.putValue(SMALL_ICON, this.getValue(SMALL_ICON)); + } + } + + protected class AutoCompleteAction extends AbstractAction { private final AutoCompleteMatcher matcher; diff --git a/source/net/sourceforge/tuned/ui/ActionPopup.java b/source/net/sourceforge/tuned/ui/ActionPopup.java index 4e6d4fa8..57b586ac 100644 --- a/source/net/sourceforge/tuned/ui/ActionPopup.java +++ b/source/net/sourceforge/tuned/ui/ActionPopup.java @@ -26,7 +26,7 @@ public class ActionPopup extends JPopupMenu { protected final JPanel actionPanel = new JPanel(new MigLayout("nogrid, insets 0, fill")); - + public ActionPopup(String label, Icon icon) { headerLabel.setText(label); headerLabel.setIcon(icon); @@ -46,70 +46,69 @@ public class ActionPopup extends JPopupMenu { add(statusLabel, "growx, h 11px!, gapx 3px, wrap 1px"); } - + public void addDescription(JComponent component) { actionPanel.add(component, "gapx 4px, wrap 3px"); } - + public void addAction(JComponent component) { actionPanel.add(component, "gapx 12px 12px, growx, wrap"); } - + @Override public void addSeparator() { actionPanel.add(new JSeparator(), "growx, wrap 1px"); } - + @Override public JMenuItem add(Action a) { LinkButton link = new LinkButton(a); - // close popup when action is triggered - link.addActionListener(closeListener); - // underline text - link.setText(String.format("%s", link.getText())); + link.setText(String.format("%s", link.getText())); // use rollover color link.setRolloverEnabled(false); link.setColor(link.getRolloverColor()); - addAction(link); + // close popup when action is triggered + link.addActionListener(closeListener); + addAction(link); return null; } - + public void clear() { actionPanel.removeAll(); } - + @Override public void setLabel(String label) { headerLabel.setText(label); } - + @Override public String getLabel() { return headerLabel.getText(); } - + public void setStatus(String string) { statusLabel.setText(string); } - + public String getStatus() { return statusLabel.getText(); } - + private final ActionListener closeListener = new ActionListener() { @Override