I agree that the four showXXX() methods are a slight complexity, but I think they are simpler than the alternative. They quickly communicate the implied "Type" of the DialogBox and response:
// Type Message: No response DialogBox dbox = new DialogBox("FYI"); dbox.setMessage("Just saying..."); dbox.showMessageDialog(focusedNode); // Type Confirm: Boolean response DialogBox dbox = new DialogBox("Sanity Check"); dbox.setMessage("Really???"); boolean response = dbox.showConfirmDialog(focusedNode); // Type Option: Integer response DialogBox dbox = new DialogBox("Which One"); dbox.setMessage("Select One"); dbox.setOptions(myOptions); int response = dbox.showOptionDialog(focusedNode, defaultOption); // Type Input: String response DialogBox dbox = new DialogBox("Tell Me"); dbox.setMessage("Tell me what you want:"); String response = xbox.showOptionDialog(focusedNode, default); The only alternative I see would be to explicitly set a DialogBox type and return a DialogBoxResponse, which could embody any of the above. That seems cumbersome to me. I also think it would be over-engineering to try to support any kind of response (say like a Color or a Font). In these cases, I think it's better to have your ColorChooserPane or FontChooserPane act as content: // Type ColorChooser: Boolean response plus Color DialogBox dbox = new DialogBox("Please Pick a Color"); dbox.setContent(myColorChooserPane); if(dbox.showConfirmPanel(focusedNode)) setColor(myColorChooserPane.getSelectedColor()); In fact, your ColorChooserPane could have a showColorDialog() method that would just be the above code. Jeff Martin On Jun 20, 2014, at 10:15 AM, Stephen F Northover <steve.x.northo...@oracle.com> wrote: > This essentially matches my current thinking, however, I would have DialogBox > as an abstract superclass of Alert. Further, I would not have many different > types of show() methods. > > Want to take the discussion further in the JIRA? That way, is will track > everyone's thinking on the various issues. The downside is that JIRA does > not provide threaded conversations and it can be hard to follow. > > Steve > > On 2014-06-20, 9:41 AM, Jeff Martin wrote: >> That is a great post. I think the big problem with dialogs in Swing was the >> permutations problem. There were four basic types of dialogs (Message, >> Confirm, Option, Input) with six different parameters (Title, Message, Icon, >> Content, MessageType, Options) - so JOptionPane ended up with a sea of >> static methods that were confusing to navigate. >> >> I don't think you could go wrong with a simple DialogBox class like this (I >> love simple): >> >> // Constructor >> public DialogBox(String aTitle); >> >> // Options >> public String getTitle(); >> public void setTitle(String aTitle); >> public String getMessage(); >> public void setMessage(String aMessage); >> public MessageType getMessageType(); >> public void setMessageType(MessageType aMessageType); >> public Node getContent(); >> public void setContent(Node aNode); >> public Node getGraphic(); >> public void setGraphic(Node aNode); >> public String[] getOptions(); >> public void setOptions(String ... theOptions); >> >> // Convenience methods to set Message + MessageType >> public void setErrorMessage(String aMessage); >> public void setWarningMessage(String aMessage); >> public void setQuestionMessage(String aMessage); >> >> // Show methods >> public void showMessageDialog(T aComp); >> public boolean showConfirmDialog(T aComp); >> public int showOptionDialog(T aComp, String aDefault); >> public String showInputDialog(T aComp, String aDefault); >> >> // Programatic dismissal >> public void confirm(); >> public void cancel(); >> >> Then most common invocations would look something like this: >> >> // Get user confirmation >> DialogBox dbox = new DialogBox("Sanity Check"); >> dbox.setWarningMessage("Are you sure you want to do this? It could kill >> you."); >> if(!dbox.showConfirmationDialog(focusedNode)) return; >> >> Using instance methods instead of static methods gives opportunity to >> subclass and override various methods. And notice the Content attribute - >> for the standard case when no Content is provided, it is built >> programmatically based on the parameters (essentially just the message and >> either an Option combo, an input textfield or nothing). >> >> I've been using this in my JavaFX app for a while and it is working great >> and makes porting from Swing easy. I even built it on a convenient >> FormBuilder class that makes building a simple stack of form controls easy, >> and can also be used for advanced DialogBoxes. >> >> Jeff Martin >> 214.513.1636 >> >> >> On Jun 20, 2014, at 7:05 AM, Stephen F Northover >> <steve.x.northo...@oracle.com> wrote: >> >>> Great post Jonathan. The summary is that whatever direction we take, we'll >>> have a plan for the future. So if we run out of time and provide only a >>> very scaled back API, we'll have prototyped how it can evolve to handle >>> more complex cases. >>> >>> Steve >>> >>> On 2014-06-20, 12:37 AM, Jonathan Giles wrote: >>>> Hi all, >>>> >>>> Dialogs are something everyone wants, and also something most people seem >>>> to have an opinion on! JavaFX 8u40 will have dialogs, but what form they >>>> take (API-wise) is not yet defined. I've posted a relatively long >>>> discussion on this over at FX Experience [1] and your feedback is highly >>>> welcome. As I note in the blog post, the Jira issue for this feature is >>>> RT-12643. If you have any thoughts, please do post them there (rather than >>>> spam the many good people subscribed to openjfx-dev). >>>> >>>> [1] http://fxexperience.com/2014/06/bringing-dialogs-to-javafx/ >>>> >>>> Thanks! >>>> >