java change appearance of checkbox in JCheckBoxMenuItem - java

How can I change the default checkbox appearance of a JCheckBoxMenuItem?
I currently have , but I want it to look like , which I strongly believe not to be custom as I have seen it numerous times already.
JCheckBoxMenuItem check = new JCheckBoxMenuItem("Title");

As camickr proposed in the comment, needed to set the Look and Feel (L&F) for my application.
See How to Set The Look And Feel for further explanation.
The L&F I had in mind was the 'SystemLookAndFeel' on Windows.

Related

Procedure to change the default font in JOptionPane.showInputDialog gives mixed results

At 70 years of age I have decided to learn Java, a task that I must say has given me sometimes a lot of frustration. For the purpose of displaying a list of items for selection, I decided to make use of the showInputDialog option of the JOptionFrame class, which I found to work with a perfect alignment whenever the fault font is changed to monospaced by making a call to the UIManager like this: UIManager.put("List.font", new Font( "monospaced",Font.PLAIN,14));
The problem is that this ceases to work with the font returning to whatever its default value is whenever I insert a list in what I suppose to be called the parent frame. I can insert other objects without any problem, but not a list. My question is: what am I doing wrong? Relevant code bellow.
UIManager.put("List.font", new Font( "monospaced",Font.PLAIN,14));
String input = (String) JOptionPane.showInputDialog(null,
"World Exchanges",
"Please select one", JOptionPane.QUESTION_MESSAGE, null,
choices, choices[0]); // Initial choice
I have a suspicion that this is a consequence of inconsistent look-and-feel caching behavior. The javadocs for UIManager say this:
The set of defaults a particular look and feel supports is defined and documented by that look and feel. In addition, each look and feel, or ComponentUI provided by a look and feel, may access the defaults at different times in their life cycle. Some look and feels may aggressively look up defaults, so that changing a default may not have an effect after installing the look and feel. Other look and feels may lazily access defaults so that a change to the defaults may effect an existing look and feel. Finally, other look and feels might not configure themselves from the defaults table in any way. None-the-less it is usually the case that a look and feel expects certain defaults, so that in general a ComponentUI provided by one look and feel will not work with another look and feel.
My recommendation (based on this) would be to make this call:
UIManager.put("List.font", new Font("monospaced", Font.PLAIN,14));
after selecting the look-and-feel (if you do that), and before instantiating any Swing components.

How to change tabs location in JTabbedPane?

I want to change tabs location from left to center. How can I do this? I think I must change Look&Feel, but I don't know how.
From this:
To this:
As you already pointed out, you have to use an LookAndFeel which supports this design (centered Tab-Button).
When your selected LaF does not support this, you have to write your own TabbedPaneUI.
(But this may not be very easy.)
If you do not want to create your own TabbedPaneUI, you have to look for an existing custom TabbedPaneUI or TabbedPane-Component, which support this kind of layout.
You can take a look at this article, to get started:
http://www.javaworld.com/article/2072927/swing-gui-programmingloseandmaxtabbedpane--an-enha/swing-gui-programming/closeandmaxtabbedpane--an-enhanced-jtabbedpane.html
The placement of tabs is determined by the JTabbedPane UI delegate, typically based on BasicTabbedPaneUI. Not every Look & Feel implementation supports centered tabs, so there's no property that will work by default across platforms.
As a concrete example, com.apple.laf.AquaLookAndFeel supports centered tabs, as shown below. The class com.apple.laf.AquaTabbedPaneUI, which implements the effect, is shown here.
Because the implementation is non-trivial, a better choice is to support the user's Look & Feel choice using Preferences. A suitable Look & Feel selection control is shown here and here.
The source for the example above is seen here.

Applying Look and Feel on JOptionPane.showMessageDialog

I'm using a LAF (Look and Feel) with Substance. It's perfect, except for JOptionPane.showMessageDialog.
I want it to inherit the LAF's appearance, it gets its custom background from Windows, but not for the bar (at the corner, where you see the closing "X").
Is it that LAF doesn't have a defined style for JOptionPane? Or it's possible to extend it?
It has been a while since I used it, but I'm almost sure if you follow the examples in Substance look and feel's docs you'll get your JOptionPane fully styled.
Search for JOptionPane.showMessageDialog in the page and you'll see its use on INFORMATION/ERROR/WARNING/QUESTION_MESSAGE.

How to set a different Look & Feel for a JTable?

Is it possible to set different L&F to specific component (in my case JTable) than is already used? If so, how to do it?
Edit: I wrote this piece of code according to this tutorial. Why is this code not working? No fails or exceptions, but JTable is still the same.
NimbusLookAndFeel nb = new NimbusLookAndFeel();
jTable1.putClientProperty("Windows.Overrides",nb.getDefaults());
jTable1.putClientProperty("Windows.Overrides.InheritDefaults",false);
You can refer the below URL for all UI default values for nimbus look and feel
http://jasperpotts.com/blogfiles/nimbusdefaults/nimbus.html
Go to Table section and use all the those Table component specific UI default values in your application. That should do the trick for you.
If you would like to apply the Nimbus L&F to a button, then you simply need to figure out which class that is responsible for rendering Nimbus buttons. The process is just the same as if you want to apply your very own custom L&F, where you set your own UI class on the button.
One trick you could do is create a dummy application that uses the Nimbus look and feel, create a JTable, and do something like
System.out.println (myTable.getUI ().getClass ().getName ());
At that point you will know which UI object is used to render the JTable when using the Nimbus LAF. You can use this class name when calling setUI (TableUI) on your JTable:
myTable.setUI (new ui_manager_class_name ());
As others have said, this is hardly something we recommend though. LAF's are usually meant to be used as a whole package rather than a mix of 2-3 LAF's. Your other way out could be to use the MultiLookAndFeel, but I have never used it, so I'm not sure it does fulfill your needs. You should read the associated tutorial if you want to use it correctly.

Is it possible to remove the little dropdown arrow in a JInternalFrame?

I'm using a JInternalFrame and I want to remove the dropdown in the upper left of the frame, as it serves no purpose (I've disabled resizeable, closable, etc.)
I don't see a property for this, and I don't want to remove the entire title bar, as the title is necessary. I've looked around online, and basically come up empty here. I'm hoping it's something simple that I've just overlooked, as this is my first time using JInternalFrame, and I'm not exactly a GUI kind of guy to begin with.
internalframe.setFrameIcon(null);
Edit: hack to remove system menu in Windows:
BasicInternalFrameUI ui = (BasicInternalFrameUI)internalFrame.getUI();
Container north = (Container)ui.getNorthPane();
north.remove(0);
north.validate();
north.repaint();
The relevant Icon in The Synth Look and Feel, among the Nimbus Defaults, appears to have this key:
InternalFrame:InternalFrameTitlePane:"InternalFrameTitlePane.menuButton".icon
You may be able to use the approach shown in A Synth Example to replace the Icon.
setFrameIcon(anyBigImageThatCantBeDisplayed);
I´ve tried null parameter and got some visual issues...
So i added a big image(no background) that was already on my resource folder and the icon was no longer displayed as the menu...

Categories