X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FJvOptionPane.java;fp=src%2Fjalview%2Fgui%2FJvOptionPane.java;h=c0efd4a5e61826ba057dbbfea4373994ae46e0fb;hb=0696611c37a4eb481fd46792adb44f59ecc44ed1;hp=020890b392b35aa3271c64d007cf35ba78c0f8a5;hpb=847c502d6186eb62a30f37f608852e77c67c217f;p=jalview.git diff --git a/src/jalview/gui/JvOptionPane.java b/src/jalview/gui/JvOptionPane.java index 020890b..c0efd4a 100644 --- a/src/jalview/gui/JvOptionPane.java +++ b/src/jalview/gui/JvOptionPane.java @@ -41,7 +41,6 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -60,6 +59,7 @@ import javax.swing.event.InternalFrameListener; import jalview.bin.Console; import jalview.util.ChannelProperties; +import jalview.util.MessageManager; import jalview.util.Platform; import jalview.util.dialogrunner.DialogRunnerI; @@ -72,13 +72,16 @@ public class JvOptionPane extends JOptionPane private static boolean interactiveMode = true; + public static final Runnable NULLCALLABLE = () -> { + }; + private Component parentComponent; private ExecutorService executor = Executors.newCachedThreadPool(); private JDialog dialog = null; - private Map> callbacks = new HashMap<>(); + private Map callbacks = new HashMap<>(); /* * JalviewJS reports user choice in the dialog as the selected option (text); @@ -855,7 +858,7 @@ public class JvOptionPane extends JOptionPane initialValueButton = jb; int buttonAction = buttonActions[i]; - Callable action = callbacks.get(buttonAction); + Runnable action = callbacks.get(buttonAction); jb.setText((String) o); jb.addActionListener(new ActionListener() { @@ -884,7 +887,7 @@ public class JvOptionPane extends JOptionPane JOptionPane joptionpane = (JOptionPane) joptionpaneObject; joptionpane.setValue(buttonAction); if (action != null) - getExecutor().submit(action); + new Thread(action).start(); joptionpane.transferFocusBackward(); joptionpane.setVisible(false); // put focus and raise parent window if possible, unless cancel or @@ -980,7 +983,7 @@ public class JvOptionPane extends JOptionPane { Object o = options[i]; int buttonAction = buttonActions[i]; - Callable action = callbacks.get(buttonAction); + Runnable action = callbacks.get(buttonAction); JButton jb = new JButton(); jb.setText((String) o); jb.addActionListener(new ActionListener() @@ -991,7 +994,7 @@ public class JvOptionPane extends JOptionPane { joptionpane.setValue(buttonAction); if (action != null) - getExecutor().submit(action); + new Thread(action).start(); // joptionpane.transferFocusBackward(); joptionpane.transferFocusBackward(); joptionpane.setVisible(false); @@ -1047,7 +1050,7 @@ public class JvOptionPane extends JOptionPane } } - public void showInternalDialog(JPanel mainPanel, String title, + public void showInternalDialog(Object mainPanel, String title, int yesNoCancelOption, int questionMessage, Icon icon, Object[] options, String initresponse) { @@ -1065,7 +1068,6 @@ public class JvOptionPane extends JOptionPane this.setMessage(mainPanel); ourOptions = Arrays.asList(options); - int response; if (parentComponent != this && !(parentComponent == null && Desktop.instance == null)) { @@ -1149,25 +1151,16 @@ public class JvOptionPane extends JOptionPane * } */ @Override - public JvOptionPane setResponseHandler(Object response, - Callable action) + public JvOptionPane setResponseHandler(Object response, Runnable action) { + if (action == null) + { + action = NULLCALLABLE; + } callbacks.put(response, action); return this; } - public ExecutorService getExecutor() - { - if (executor == null) - executor = Executors.newSingleThreadExecutor(); - return executor; - } - - public void setExecutor(ExecutorService es) - { - executor = es; - } - public void setDialog(JDialog d) { dialog = d; @@ -1311,12 +1304,12 @@ public class JvOptionPane extends JOptionPane { return; } - Callable action = callbacks.get(response); + Runnable action = callbacks.get(response); if (action != null) { try { - getExecutor().submit(action).get(); + new Thread(action).start(); // action.call(); } catch (Exception e) { @@ -1395,7 +1388,7 @@ public class JvOptionPane extends JOptionPane { Object o = options[i]; int buttonAction = buttonActions[i]; - Callable action = callbacks.get(buttonAction); + Runnable action = callbacks.get(buttonAction); JButton jb; if (buttons != null && buttons.length > i && buttons[i] != null) { @@ -1413,7 +1406,7 @@ public class JvOptionPane extends JOptionPane { joptionpane.setValue(buttonAction); if (action != null) - getExecutor().submit(action); + new Thread(action).start(); // joptionpane.transferFocusBackward(); joptionpane.transferFocusBackward(); joptionpane.setVisible(false); @@ -1552,12 +1545,25 @@ public class JvOptionPane extends JOptionPane } } - public static JvOptionPane frameDialog(String message, String title, - int messageType, String[] buttonsText, String defaultButton, - Callable[] handlers, boolean modal) + public static JvOptionPane frameDialog(Object message, String title, + int messageType, String[] buttonsTextS, String defaultButtonS, + List handlers, boolean modal) { JFrame parent = new JFrame(); JvOptionPane jvop = JvOptionPane.newOptionDialog(); + final String[] buttonsText; + final String defaultButton; + if (buttonsTextS == null) + { + String ok = MessageManager.getString("action.ok"); + buttonsText = new String[] { ok }; + defaultButton = ok; + } + else + { + buttonsText = buttonsTextS; + defaultButton = defaultButtonS; + } JButton[] buttons = new JButton[buttonsText.length]; for (int i = 0; i < buttonsText.length; i++) { @@ -1581,22 +1587,28 @@ public class JvOptionPane extends JOptionPane { dialogType = JOptionPane.YES_NO_CANCEL_OPTION; } - jvop.setResponseHandler(JOptionPane.YES_OPTION, handlers[0]); + jvop.setResponseHandler(JOptionPane.YES_OPTION, + (handlers != null && handlers.size() > 0) ? handlers.get(0) + : NULLCALLABLE); if (dialogType == JOptionPane.YES_NO_OPTION || dialogType == JOptionPane.YES_NO_CANCEL_OPTION) { - jvop.setResponseHandler(JOptionPane.NO_OPTION, handlers[1]); + jvop.setResponseHandler(JOptionPane.NO_OPTION, + (handlers != null && handlers.size() > 1) ? handlers.get(1) + : NULLCALLABLE); } if (dialogType == JOptionPane.YES_NO_CANCEL_OPTION) { - jvop.setResponseHandler(JOptionPane.CANCEL_OPTION, handlers[2]); + jvop.setResponseHandler(JOptionPane.CANCEL_OPTION, + (handlers != null && handlers.size() > 2) ? handlers.get(2) + : NULLCALLABLE); } final int dt = dialogType; - jvop.getExecutor().execute(() -> { + new Thread(() -> { jvop.showDialog(message, title, dt, messageType, null, buttonsText, defaultButton, modal, buttons); - }); + }).start(); return jvop; }