I'd like to create a JavaFX application with MenuBar and I want my application to look more native-like, so I set useSystemMenuBarProperty to true. The application looks normal, like this (just ignore IntelliJ IDEA at background):
This is cool, and it works as it should. But when I minimize my application to the dock, the menubar starts to look like this:
As you can see, all buttons were disappeared, which is kinda strange.
The question is: How can I fix this? What do I have to do to make it look normal? Thanks.
This is indeed a strange problem which I actually haven't noticed before and I have no idea how to fix this. You should probably report this as a bug. At least the vanished part of the menu reappears when the window is made visible again, so this does not seem to be too serious, although it differes from the normal behaviour.
If you want to make your application even more native-like you should also have a look at https://github.com/codecentric/NSMenuFX which provides some additional features which are not present in JavaFX alone.
Related
I installed Eclipse IDE for Enterprise Java Developers 2020-09 with WindowBuilder 1.9.4. Then I tried to create a test application: SWT/JFace Java Project with a JFace ApplicationWindow.
My problem is that I cannot drop anything on the window directly in design mode. It is possible to add widgets to the main container in the components tree. But they seem to be hidden behind the parent shell (I could see this from setting a background color for it and when I add them I can see their bounds, but then no longer). It is not possible to resize the application window in design mode either.
However, when I do "Test/Preview...", the widgets are there. And also when I run the program, as they should as they are in the code. In the latter case also the resizing works (not with "Test/Preview..."). The resizing seems to work at first, but then it snaps back to a minimal size where only the menu and toolbar fit in the window,
This is so with any such project. I first tried to import a program I had written in an older version of Eclipse. There I have tabs in a composite in the container. They seem to be hidden, too (and misplaced, also behind the toolbar). But when I run the program, everything is fine. I first thought I might have messed something up in the program, so parsing gets sidetracked. But that cannot be it as the problem already arises in the simple test program where I have just one widget and the default code.
I have tried quite a few things to get around this, eg. reinstalled the IDE, installed an older version, installed an older version of WindowsBuilder in case this is a bug in either. But to no avail. Has anyone experienced the same problem? Seems like there is a simple mistake on my part. Something I would have to change in the settings or maybe the program?
But I have no idea where to look. Could it have to do with the JRE (OpenJDK15U-jdk_x64_windows_hotspot_15_36)? Had to take that as the download from Oracle does not work for some reason. There is a warning that it is not exactly compatible. But then the program works fine, so it cannot be at such a basic level? Any ideas very much appreciated as I am totally stuck at this point.
There is no problem with designing eg. a JFace dialog. Everything works as expected, I can drop widgets, resize, etc.
Here is how it looks:
Brute force "workaround": I go back to Oxygen where things are working fine. But somewhat of a defeat because I am stuck with an old version, which is a deadend. IIRC already going to Photon posed insurmountable problems for me (certainly my fault as I am not that good at the nitty-gritty). Would still be very interested in an answer to my question. Urgency is now lower as I can at least keep working on my program and let my frustration die down after two days of futile attempts.
[Edit: I only tried the resizing in Oxygen 32-bit, that worked, but did not check whether the problem with dropping a widget on the application window was also there. Then I tried to get the 64-bit version to run, which I could not do. There is apparently a problem with Java > 8. Installation of Photon worked finally. However, while resizing is okay there, I get the same problem with dropping widgets and that they appear to be misplaced (upper left corner of the area seems to be behind the toolbar. The "workaround" unfortunately went nowhere. So I am again more interested in an answer than I thought.]
[Edit 2 as per Oct 12: Since I could not solve this problem, I decided to redo the GUI with a SWT Application window. That lacks some of the functionality of a JFace Application window (I especially miss the ease of Actions). So it seems like a step backwards, and it caused some extra effort. But then the upside is that I had to rethink a few things about the structure anyway, which means I was forced to do that sooner than later. But still would like to get also JFace Application windows to run. Pressure is no longer there, but out of interest what went wrong.]
I am making use of JavaFX's built in Alert and Dialog classes which work great in Windows and when running from Eclipse within Windows, but appear behind the parent window when running on my target hardware which is running RedHat 6. I have tried tweaking various things including:
primaryStage.initStyle(StageStyle.UNDECORATED);
primaryStage.setFullScreen(true);
alert.initOwner(primaryStage) and alert.initOwner(primaryStage.getOwner())
alert.initModality(Modality.WINDOW_MODAL) and alert.initModality(Modality.APPLICATION_MODAL)
alert.initStyle(StageStyle.***) with *** being all possible styles.
The only way I have been able to get the alerts and dialogs to remain on top is by calling alert.initStyle(StageStyle.UTILITY) however this creates a window with a cross button which I do not want. Ideally I would prefer a bordered window without additional buttons, or an undecorated window which I should then be able to style to achieve the bordered look.
I have read of similar issues in which using Windows doesn't work but Ubuntu does. I haven't been able to find any open issues or solutions in this case.
I am using Java 8 Update 77.
I have experienced a similar problem: Alerts would show perfectly well in front of the primary stage in Windows 10, yet behind the stage when running the program on Ubuntu. alert.initOwner(primaryStage) actually solved the problem for me.
I've been having a problem with viewing my JFrames recently. I was able to view them just fine in the Design panel of Window Builder not too long ago, and now all that I see is just the JFrame options to minimize, maximize, or close the screen. Everything else around it is white. I am using a card layout on Juno Eclipse.
However, when I run the program, the small JFrame options to minimize, maximize, or exit appear. I am able to maximize my program and run it. The problem is that I can't seem to see where my labels or buttons are in design mode. Instead I just see white, which makes it difficult to do any editing.
This would be a lot easier if I was able to post pictures.
The problem you describe happens when you change the auto-generated code too much by hand. For example, adding too many method calls, or especially changing constructors, etc causes it to lose its ability to render the preview. This is one of the reasons I avoid using WindowBuilder as much as possible, because this is a known bug and as far as I know there is not a fix. I'm sorry for being the bearer of bad news, but unless you can find the added code that caused it to complain, and manipulate it a bit, you may be out of luck. The trick to getting WindowBuilder to work for you is to keep as close to the structure of the auto-generated code as possible.
I've had this error before in pydev perspectives in the past, and the only solution I've ever managed was to remove the broken perspective and start a new one.
The problem is this:
Normally the different panes of the workspace can be minimized, maximized, and regular size. Right now, I cannot get the "shared area" code section of the debug perspective to show up at all. I can peak at it while it's minimized, but that's all I can manage.
What's more, eclipse automatically switches to debug, so it's basically impossible for me to debug code right now.
I'd really like to know why this is happening to me, and how to avoid and/or fix it.
Also, I'm currently running java 7, I have not updated yet.
You can go to Window, Reset Perspective which will give you your shared area back, although also obviously reset any other views you may have.
I am creating an application that is essentially a financial alerts site. I am a basic level Java programmer, and I have created some of the logic for alerts in Java.
I want to be able to have pop-ups appear on the desktop whenever something "interesting" happens (interesting depends on %change, liquidity and a few other simple factors).
What is the best combo of technology to implement something like this?
I would use the java.awt.SystemTray in Java SE 6. It's cross-platform and pretty easy to use.
Although some people hate the balloon notifications in Windows, they're the least obtrusive popups, since they can be ignored by the user or easily dismissed. Most importantly, they can't be missed by the user who has been away from the computer, because balloons (at least in Windows XP/Vista) use system idle timers to determine when's the right time to disappear.
Some prefer more traditional toast notifications, similar to those shown by Outlook - they show up and slowly fade out, giving the user some time to interact with them if needed.
I had the same problem and finally solved it using an undecorated, alwaysOnTop window.
And thanks to this blog entry I found the TimingFramework, and now it even is translucent, fades in and out, goes 100% opaque on mouse over etc. In conjunction with the SystemTray and TrayIcon the behavior is nearly as that of Outlook.
Oh, I have to note, that other than the second link, I do the fading out with
AWTUtilities.setWindowOpacity(window, op);
You could write a java program that resides in the system tray, but I am not sure if there are cross platform compatible ways to do this. maybe you have to use a platform specific library for Win, Mac, Linux, ...
I'd just create a message window and animate it. Then add SystemTray support and voila, you're done.
In Delphi you can do that pretty quickly, but you can't easily reuse your java logic
You can just run you program in "silent" mode, without creating any windows by default, maybe just a little icon in the taskbar which when double-clicked will open a settings window. The program will be running in the background and creating windows with the set focus whenever an event happens.
But in my opinion, a slide window or at least a balloon tooltip is a better idea.