Disable publishing JOptionPane on application - java

Greetings everyone. I have a problem which i can solve. I need that JOptionPane does not showing in my application maybe there some way to make this. Best regards Alejandro Del Rio.

Normally a JOptionPane is shown by using one the the showXXX static methods. Using this approach you don't have a reference to the actual dialog so you can't just hide the option pane.
Read the JOptionPane API documentation. There you will find a "Direct Use" example of using a JOptionPane. In this case you are responsible for more code to handle the showing of the dialog and for handling the selected option button. But you do have a reference to the actual dialog so you can use setVisible( false ) as required.
Of course option panes are modal so you still need to somehow schedule the closing of the dialog, maybe by starting a Swing Timer before the option pane is displayed.

Have you tried setVisible() ?
JOptionPane optionPane = new JOptionPane();
...
...
...
optionPane.setVisible(false);

I just cant to setVisiable();
I have a class which i does not have a source code and there are many not needed Joptionpane shows i want not one of them is not showing in application.

Related

Disabling a JFrame not through Modality

I need my JFrame to freeze/ become inaccessible, similar to how it would with a model JDialog or setEnabled(false).
In most cases I would use JDialog but in this instance I am running a dialog through a C library.
Going down the setEnabled(false) line also doesn't work because it, on setEnabled(true), will send the window to the back. And even using toFront() will cause the window to go to the back for a split second then come to the front again.
Is there a better way to go about doing this, or an I stuck with the slight imperfection of the window flickering.
Also if you are familiar with the library I am using LWJGL's NativeFileDialog wrapper.
I have found a pretty good solution to this issue, originally answered as part of this post. It takes the idea of using a JDialog, but instead of displaying some message it is completely transparent, invisible to the user.
final JDialog modalBlocker = new JDialog();
modalBlocker.setModal(true);
modalBlocker.setUndecorated(true);
modalBlocker.setOpacity(0.0f);
modalBlocker.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
Then we can simply display our modal and show our file dialog
// Using invoke later we show our dialog after our frame has been blocked
// by setVisible(true)
SwingUtilities.invokeLater(()->{
// show dialog
});
modalBlocker.setVisible(true);
modalBlocker.dispose(); // immediately release resources
Then we can call modalBlocker.setVisible(false) at any point to stop the modality effect on our frame.
Again this is the solution that worked for me, it is not mine. The code was written to integrate JavaFX with Swing by Sergei Tachenov, all credit goes to him!

Prevent JOption from blocking child JFrame

Is there a possibility to prevent a JOptionPane dialog from blocking the interaction with the rest of the program, especially child JFrames? In my GUI, I launch a JFrame and want a message dialog to pop up after the child is closed to remind the user of something, but they launch parallel and the reminder blocks the child frame from being used.
Like here:
popupObjMan newPopup1 = new popupObjMan(gatewayAbstract, gatewayAbstractID);
JOptionPane.showInternalMessageDialog(this, "REMINDER: DO REFRESH");
I've tried to set the popup always on top, but this doesn't quite do the job.
I have no problem with them launching parallel (I'd even prefer it), but I could not work my head around it yet.
I just started Java programming ,so sorry in case that'd be something obvious.
A JOptionPane normally need to be modal. It shows something important and waits till the user answers with whatever option you give him (e.g. ok-button, yes/no-buttons, ...)
But there are several ways to reach your target.
(a)
Normally a JOptionPane creates a modal window.
You need a modeless window which does not block other windows.
https://docs.oracle.com/javase/tutorial/uiswing/misc/modality.html
(b)
You can start different threads to work for your different windows. They can have windows which are shown whenever the responsible thread commands them to. This is a bit difficult and can lead to memory-troubles.
(c)
You can write your own message-panels (e.g. notificaton) which are shown when and how long you like.
Bigger projects use different of these ways to achieve their goals.
A JOptionPane is a component, just like a JPanel. As a component it can be added to any other panel.
The JOptionPane API provides static methods to create a show the JOptionPane on a modal JDialog by default. You can't change this behaviour.
However, you can manually add the JOptionPane to a non-modal JDialog that you create. This is extra work as you now need to handle the closing of the dialog and processing the clicked button.
If you really want to do this then read the JOptionPane API. There is a section on Direct Use which demonstrates the basic code needed to add the JOptionPane to a JDialog.

Multiple frames in jFrame?

I'm currently learning how to create a program with Java and jFrame. One problem I have is that I cant create new "forms" (how they are called in visualbasic) or windows. I'm using "Java-Editor", a usually very simple editor for things like that. Can anyone help me create a new form?
Thanks for your help in advance,
Till
From JFrame I assume that you are using Swing, and that you want multiple windows for your application. Your app should only use one JFrame object, if you need more windows (usually these are popup messages) then you can use dialogs. The class for this is JOptionPane.
Here is an example:
JOptionPane.showMessageDialog(null,"title","content",JOptionPane.INFORMATION_DIALOG);
As you can see you can control the title and the content displayed. Note that for the content parameter you can pass any JPanel object, so you dialog can display a lot of things.
The first parameter is the owner of the dialog, now I just set it to null, which means the dialog will have no owner. If you store a reference to your JFrame object then you can pass this for example and the dialog will always appear above your main window.
The last parameter is just for the general styling of the dialog. You can set it to other message types like ERROR MESSAGE too.
More info about displaying simple dialogs: https://docs.oracle.com/javase/7/docs/api/javax/swing/JOptionPane.html

How do I extend Javas JFrame to replicate WinForms' ShowDialog (.Net Framework)?

I have written an application in Java that has a JFrame with options. I now want a certain action to be executed when the user has confirmed the dialog with "Ok". I was recommended to add a return value to JFrame.
Unfortunately, I don't have any experience and need some help. Here are the details.
I want to extend JFrame so that I can have an Enum "DialogResult" when closing a JFrame like in the .Net Framework. Well, the Enum is no problem. My problem is to replicate the ShowDialog method from WinForms of the .Net Framework working in Java for the class JFrame.
Below is an example code in C#:
// DlgOptions : Form
DlgOptions dlg = new DlgOptions();
if(dlg.ShowDialog() == DialogResult.Ok)
{
// do something only when "Ok" was clicked
}
Here's a link from MSDN with the behavior I want to replicate:
https://msdn.microsoft.com/de-de/library/c7ykbedk(v=vs.110).aspx
How can I best implement this? Thanks in advance.
EDIT:
I changed my DlgOptions class so it doesn't extend JFrame but JDialog. I also added an enumeration DialogResult and added a public property of this type in my DlgOptions. But I still have a problem. When I use this code:
// executed when user clicked a JMenuItem in a JMenuBar
DlgOptions dlg = new DlgOptions();
dlg.setModal(true);
dlg.setVisible(true);
if(dlg.DialogResult == DialogResult.OK)
{
// do something
}
the program continues running before the user closed the modal dialog. What can I do?
EDIT 2:
My JDialog contains two JButtons; one to confirm changes that were made and one to abort changing the preferences for the program. I have several JCheckBoxes the user can check or uncheck.
So a JOptionPane would not be what I want / need (as far as I know). That's why I need a modal JDialog. But my Java code above doesn't work as I want it to. I read on a German website of a Java book that a JDialog set to modal with
setModal(true);
would cause the program to wait until the dialog is closed. The problem is, that the code continues too early.

How do I keep a dialog box always on top?

I created a dialog box like this:
String response =
JOptionPane.showInputDialog(null,"message","title",JOptionPane.PLAIN_MESSAGE);
I'd like to keep it always on top of all windows.
Do you have any idea?
Thanks!
In fact, using Java, having a system modal dialog is not possible. The best you can have is a toolkit modal option pane. That's to say an option pane that stay in front of all Java windows.
This example explains how Java6 allows you to do that.
Maybe I don't get the question, but I quickly created desktop app with code you posted and it actually is modal ...

Categories