{"id":63010,"date":"2022-03-18T09:01:14","date_gmt":"2022-03-18T09:01:14","guid":{"rendered":"https:\/\/www.cryptocabaret.com\/?p=63010"},"modified":"2022-03-18T09:01:14","modified_gmt":"2022-03-18T09:01:14","slug":"how-to-beautify-your-java-applications","status":"publish","type":"post","link":"https:\/\/www.cryptocabaret.com\/?p=63010","title":{"rendered":"How to beautify your Java applications"},"content":{"rendered":"<p><span class=\"field field--name-title field--type-string field--label-hidden\">How to beautify your Java applications<\/span><br \/>\n<span class=\"field field--name-uid field--type-entity-reference field--label-hidden\"><a title=\"View user profile.\" href=\"https:\/\/opensource.com\/users\/seth\" class=\"username\">Seth Kenlon<\/a><\/span><br \/>\n<span class=\"field field--name-created field--type-created field--label-hidden\">Fri, 03\/18\/2022 &#8211; 03:00<\/span><\/p>\n<div data-drupal-selector=\"rate-node-69676\" class=\"rate-widget-thumbs-up\">\n<div class=\"rate-thumbs-up-btn-up rate-thumbs-up-btn-up vote-pending\">Up<\/div>\n<div class=\"rate-score\"><a href=\"https:\/\/opensource.com\/user\/register?absolute=1\">Register<\/a> or <a href=\"https:\/\/opensource.com\/user\/login?current=\/rss.xml&amp;absolute=1\">Login<\/a> to like.<\/div>\n<\/div>\n<div class=\"clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item\">\n<p>What&#8217;s not to love about Java?<\/p>\n<p>I love that Java lets me write applications on one platform and run them on other platforms. You don&#8217;t have to mess around with platform-specific SDKs, using a different library for <i>that one<\/i> platform, or inserting little code hacks to make <i>that other<\/i> platform behave. To me, that&#8217;s how easy all modern programming ought to be. There&#8217;s great infrastructure around Java, too, like the <a href=\"https:\/\/opensource.com\/article\/22\/3\/maven-manage-java-dependencies\">Maven build system<\/a> and <a href=\"https:\/\/opensource.com\/article\/22\/3\/manage-java-versions-sdkman\">SDKMan<\/a>.<\/p>\n<p>But there&#8217;s one thing about Java I don&#8217;t love: the look and feel of its default GUI toolkit, called Swing. While some people feel there&#8217;s a charming nostalgia to Swing, for the modern computerist, it can look a little dated.<\/p>\n<p>Fortunately, that&#8217;s an easy problem to solve. Java is a programming language, so if you&#8217;re writing an app in Java you can reprogram its look and feel using one of several Java theming libraries.<\/p>\n<\/p>\n<div class=\"embedded-resource-list callout-float-right\">\n<div class=\"field field--name-title field--type-string field--label-hidden field__item\">More on Java<\/div>\n<div class=\"field field--name-links field--type-link field--label-hidden field__items\">\n<div class=\"field__item\"><a href=\"https:\/\/developers.redhat.com\/topics\/enterprise-java\/?intcmp=7013a000002Cxq6AAC\">What is enterprise Java programming?<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/developers.redhat.com\/products\/openjdk\/overview?intcmp=7013a000002Cxq6AAC\">Red Hat build of OpenJDK<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/downloads\/java-cheat-sheet?intcmp=7013a000002Cxq6AAC\">Java cheat sheet<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/www.redhat.com\/en\/services\/training\/do092-developing-cloud-native-applications-microservices-architectures?intcmp=7013a000002Cxq6AAC\">Free online course: Developing cloud-native applications with microservices arc\u2026<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/tags\/java?intcmp=7013a000002Cxq6AAC\">Fresh Java articles<\/a><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<h2>Default theme of Java Swing<\/h2>\n<p>The default theme of Java Swing hasn&#8217;t changed much in the past decade. This is a screenshot of an example Java app from 2006\u2014or is it 2022?<\/p>\n<p>Hard to tell.<\/p>\n<p>\u00a0<\/p>\n<article class=\"align-center media media--type-image media--view-mode-full\" title=\"Swing 2006\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/03\/java-swing-gui-2006.jpeg\" width=\"646\" height=\"520\" alt=\"Screenshot of Java Swing in a dated style\" title=\"Swing 2006\" loading=\"lazy\"><\/div>\n<\/article>\n<p>You can see a simpler version for yourself with this demo code:<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"java geshifilter-java\"><span class=\"kw1\">package<\/span> <span class=\"co2\">com.opensource.myexample2app<\/span><span class=\"sy0\">;<\/span><br><br><span class=\"kw1\">import<\/span> <span class=\"co2\">javax.swing.Box<\/span><span class=\"sy0\">;<\/span><br><span class=\"kw1\">import<\/span> <span class=\"co2\">javax.swing.BoxLayout<\/span><span class=\"sy0\">;<\/span><br><span class=\"kw1\">import<\/span> <span class=\"co2\">javax.swing.JButton<\/span><span class=\"sy0\">;<\/span><br><span class=\"kw1\">import<\/span> <span class=\"co2\">javax.swing.JFrame<\/span><span class=\"sy0\">;<\/span><br><span class=\"kw1\">import<\/span> <span class=\"co2\">javax.swing.JPanel<\/span><span class=\"sy0\">;<\/span><br><span class=\"kw1\">import<\/span> <span class=\"co2\">javax.swing.border.EmptyBorder<\/span><span class=\"sy0\">;<\/span><br><span class=\"kw1\">import<\/span> <span class=\"co2\">java.awt.Dimension<\/span><span class=\"sy0\">;<\/span><br><span class=\"kw1\">import<\/span> <span class=\"co2\">java.awt.EventQueue<\/span><span class=\"sy0\">;<\/span><br><span class=\"kw1\">import<\/span> <span class=\"co2\">java.awt.Insets<\/span><span class=\"sy0\">;<\/span><br><span class=\"kw1\">import<\/span> <span class=\"co2\">javax.swing.JRadioButton<\/span><span class=\"sy0\">;<\/span><br><br><span class=\"kw1\">public<\/span> <span class=\"kw1\">class<\/span> App <span class=\"kw1\">extends<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+jframe\"><span class=\"kw3\">JFrame<\/span><\/a> <span class=\"br0\">{<\/span><br><br>\n\u00a0 \u00a0 <span class=\"kw1\">private<\/span> <span class=\"kw4\">void<\/span> run<span class=\"br0\">(<\/span><span class=\"br0\">)<\/span> <span class=\"br0\">{<\/span><br>\n\u00a0 \u00a0 \u00a0 \u00a0 var window <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+jpanel\"><span class=\"kw3\">JPanel<\/span><\/a><span class=\"br0\">(<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><br>\n\u00a0 \u00a0 \u00a0 \u00a0 window.<span class=\"me1\">setLayout<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">new<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+boxlayout\"><span class=\"kw3\">BoxLayout<\/span><\/a><span class=\"br0\">(<\/span>window, <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+boxlayout\"><span class=\"kw3\">BoxLayout<\/span><\/a>.<span class=\"me1\">X_AXIS<\/span><span class=\"br0\">)<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><br>\n\u00a0 \u00a0 \u00a0 \u00a0 window.<span class=\"me1\">setBorder<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">new<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+emptyborder\"><span class=\"kw3\">EmptyBorder<\/span><\/a><span class=\"br0\">(<\/span><span class=\"kw1\">new<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+insets\"><span class=\"kw3\">Insets<\/span><\/a><span class=\"br0\">(<\/span><span class=\"nu0\">15<\/span>, <span class=\"nu0\">15<\/span>, <span class=\"nu0\">15<\/span>, <span class=\"nu0\">15<\/span><span class=\"br0\">)<\/span><span class=\"br0\">)<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><br><br>\n\u00a0 \u00a0 \u00a0 \u00a0 <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+jbutton\"><span class=\"kw3\">JButton<\/span><\/a> btn_hello <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+jbutton\"><span class=\"kw3\">JButton<\/span><\/a><span class=\"br0\">(<\/span><span class=\"st0\">\"Hello\"<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><br>\n\u00a0 \u00a0 \u00a0 \u00a0 btn_hello.<span class=\"me1\">setSize<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">new<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+dimension\"><span class=\"kw3\">Dimension<\/span><\/a><span class=\"br0\">(<\/span><span class=\"nu0\">80<\/span>, <span class=\"nu0\">20<\/span><span class=\"br0\">)<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><br>\n\u00a0 \u00a0 \u00a0 \u00a0 window.<span class=\"me1\">add<\/span><span class=\"br0\">(<\/span>btn_hello<span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><br>\n\u00a0 \u00a0 \u00a0 \u00a0 <br>\n\u00a0 \u00a0 \u00a0 \u00a0 window.<span class=\"me1\">add<\/span><span class=\"br0\">(<\/span><a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+box\"><span class=\"kw3\">Box<\/span><\/a>.<span class=\"me1\">createRigidArea<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">new<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+dimension\"><span class=\"kw3\">Dimension<\/span><\/a><span class=\"br0\">(<\/span><span class=\"nu0\">10<\/span>, <span class=\"nu0\">15<\/span><span class=\"br0\">)<\/span><span class=\"br0\">)<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><br><br>\n\u00a0 \u00a0 \u00a0 \u00a0 <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+jradiobutton\"><span class=\"kw3\">JRadioButton<\/span><\/a> rad_world <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+jradiobutton\"><span class=\"kw3\">JRadioButton<\/span><\/a><span class=\"br0\">(<\/span><span class=\"st0\">\"World\"<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><br>\n\u00a0 \u00a0 \u00a0 \u00a0 rad_world.<span class=\"me1\">setSize<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">new<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+dimension\"><span class=\"kw3\">Dimension<\/span><\/a><span class=\"br0\">(<\/span><span class=\"nu0\">80<\/span>, <span class=\"nu0\">20<\/span><span class=\"br0\">)<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><br>\n\u00a0 \u00a0 \u00a0 \u00a0 window.<span class=\"me1\">add<\/span><span class=\"br0\">(<\/span>rad_world<span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><br><br>\n\u00a0 \u00a0 \u00a0 \u00a0 add<span class=\"br0\">(<\/span>window<span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><br>\n\u00a0 \u00a0 \u00a0 \u00a0 pack<span class=\"br0\">(<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><br><br>\n\u00a0 \u00a0 \u00a0 \u00a0 setTitle<span class=\"br0\">(<\/span><span class=\"st0\">\"Hello world\"<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><br>\n\u00a0 \u00a0 \u00a0 \u00a0 setDefaultCloseOperation<span class=\"br0\">(<\/span><a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+jframe\"><span class=\"kw3\">JFrame<\/span><\/a>.<span class=\"me1\">EXIT_ON_CLOSE<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><br>\n\u00a0 \u00a0 \u00a0 \u00a0 setLocationRelativeTo<span class=\"br0\">(<\/span><span class=\"kw2\">null<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><br>\n\u00a0 \u00a0 <span class=\"br0\">}<\/span><br><br>\n\u00a0 \u00a0 <span class=\"kw1\">public<\/span> <span class=\"kw1\">static<\/span> <span class=\"kw4\">void<\/span> main<span class=\"br0\">(<\/span><a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+string\"><span class=\"kw3\">String<\/span><\/a><span class=\"br0\">[<\/span><span class=\"br0\">]<\/span> args<span class=\"br0\">)<\/span> <span class=\"br0\">{<\/span><br><br>\n\u00a0 \u00a0 \u00a0 \u00a0 <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+eventqueue\"><span class=\"kw3\">EventQueue<\/span><\/a>.<span class=\"me1\">invokeLater<\/span><span class=\"br0\">(<\/span><span class=\"br0\">(<\/span><span class=\"br0\">)<\/span> <span class=\"sy0\">-&gt;<\/span> <span class=\"br0\">{<\/span><br>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 var app <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> App<span class=\"br0\">(<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><br>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 app.<span class=\"me1\">run<\/span><span class=\"br0\">(<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><br>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 app.<span class=\"me1\">setVisible<\/span><span class=\"br0\">(<\/span><span class=\"kw2\">true<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><br>\n\u00a0 \u00a0 \u00a0 \u00a0 <span class=\"br0\">}<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><br>\n\u00a0 \u00a0 <span class=\"br0\">}<\/span><br><span class=\"br0\">}<\/span><\/div><\/div><\/pre>\n<p>Run that in the <a href=\"https:\/\/opensource.com\/article\/20\/7\/ide-java\">Java IDE<\/a> of your choice or with Java directly:<\/p>\n<pre>\n<span class=\"geshifilter\"><code class=\"bash geshifilter-bash\"><span class=\"co4\">$ <\/span><span class=\"kw2\">java<\/span> App.java<\/code><\/span><\/pre>\n<p>The result is simple but demonstrative:<\/p>\n<p>\u00a0<\/p>\n<article class=\"align-center media media--type-image media--view-mode-full\" title=\"Simple Swing\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/03\/java-swing-ugly.jpeg\" width=\"465\" height=\"179\" alt=\"screenshot of simple Java Swing as Hello World\" title=\"Simple Swing\" loading=\"lazy\"><\/div>\n<\/article>\n<h2>Look and Feel Java libraries<\/h2>\n<p>Java Swing gets its theme from Look and Feel (LAF) libraries.<\/p>\n<p>The few that are bundled with Java suffice in a pinch, but newer ones are available, and you can bundle those libraries with your code to give your application a different theme. You can find LAF libraries by searching for &#8220;laf&#8221; on sites like <a href=\"http:\/\/mvnrepository.com\/\" target=\"blank\" rel=\"noopener\">Mvnrepository.com<\/a>, or on popular coding sites like GitLab or GitHub.<\/p>\n<p>My favorite is FlatLaf, but there are very good themes by NetBeans, IntelliJ, and many others under a variety of different licenses to fit any project.<\/p>\n<p>The easiest way to use one of these libraries is to add it to Maven, then make minor modifications to your code to invoke the theme.<\/p>\n<p>First, add the library to Maven:<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"xml geshifilter-xml\"><span class=\"sc3\"><span class=\"re1\">&lt;dependencies<span class=\"re2\">&gt;<\/span><\/span><\/span><br>\n\u00a0 <span class=\"sc3\"><span class=\"re1\">&lt;dependency<span class=\"re2\">&gt;<\/span><\/span><\/span><br>\n\u00a0 \u00a0 <span class=\"sc3\"><span class=\"re1\">&lt;groupId<span class=\"re2\">&gt;<\/span><\/span><\/span>com.formdev<span class=\"sc3\"><span class=\"re1\">&lt;\/groupId<span class=\"re2\">&gt;<\/span><\/span><\/span><br>\n\u00a0 \u00a0 <span class=\"sc3\"><span class=\"re1\">&lt;artifactId<span class=\"re2\">&gt;<\/span><\/span><\/span>flatlaf<span class=\"sc3\"><span class=\"re1\">&lt;\/artifactId<span class=\"re2\">&gt;<\/span><\/span><\/span><br>\n\u00a0 \u00a0 <span class=\"sc3\"><span class=\"re1\">&lt;version<span class=\"re2\">&gt;<\/span><\/span><\/span>2.0.1<span class=\"sc3\"><span class=\"re1\">&lt;\/version<span class=\"re2\">&gt;<\/span><\/span><\/span><br>\n\u00a0 <span class=\"sc3\"><span class=\"re1\">&lt;\/dependency<span class=\"re2\">&gt;<\/span><\/span><\/span><br><span class=\"sc3\"><span class=\"re1\">&lt;\/dependencies<span class=\"re2\">&gt;<\/span><\/span><\/span><\/div><\/div><\/pre>\n<p>Next, import the Java <code>UIManager<\/code> library and the LAF theme you&#8217;re using to your project.<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"java geshifilter-java\"><span class=\"kw1\">import<\/span> <span class=\"co2\">com.formdev.flatlaf.FlatLightLaf<\/span><span class=\"sy0\">;<\/span><br><span class=\"kw1\">import<\/span> <span class=\"co2\">javax.swing.UIManager<\/span><span class=\"sy0\">;<\/span><\/div><\/div><\/pre>\n<p>In the class that creates your GUI, use <code>UIManager<\/code> to set the application&#8217;s look and feel:<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"java geshifilter-java\"><span class=\"kw1\">try<\/span> <span class=\"br0\">{<\/span><br>\n\u00a0 \u00a0 <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+uimanager\"><span class=\"kw3\">UIManager<\/span><\/a>.<span class=\"me1\">setLookAndFeel<\/span><span class=\"br0\">(<\/span> <span class=\"kw1\">new<\/span> FlatLightLaf<span class=\"br0\">(<\/span><span class=\"br0\">)<\/span> <span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><br><span class=\"br0\">}<\/span> <span class=\"kw1\">catch<\/span><span class=\"br0\">(<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+exception\"><span class=\"kw3\">Exception<\/span><\/a> ex <span class=\"br0\">)<\/span> <span class=\"br0\">{<\/span><br>\n\u00a0 \u00a0 <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+system\"><span class=\"kw3\">System<\/span><\/a>.<span class=\"me1\">err<\/span>.<span class=\"me1\">println<\/span><span class=\"br0\">(<\/span> <span class=\"st0\">\"Failed to initialize theme. Using fallback.\"<\/span> <span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><br><span class=\"br0\">}<\/span><\/div><\/div><\/pre>\n<p>That&#8217;s it! Launch your application to see the new look and feel.<\/p>\n<p>\u00a0<\/p>\n<article class=\"align-center media media--type-image media--view-mode-full\" title=\"FlatLightLaf\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/03\/java-swing-pretty.jpeg\" width=\"561\" height=\"244\" alt=\"Screenshot of Swing with a more modern style, Flatlaf\" title=\"FlatLightLaf\" loading=\"lazy\"><\/div>\n<\/article>\n<p>Flatlaf happens to have variant themes, so you can change <code>FlatLightLaf<\/code> to <code>FlatDarkLaf<\/code> for a dark theme:<\/p>\n<p>\u00a0<\/p>\n<article class=\"align-center media media--type-image media--view-mode-full\" title=\"FlatDarkLaf\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/03\/java-swing-pretty-dark.jpeg\" width=\"572\" height=\"130\" alt=\"Screenshot of Swing in Flatlaf, dark version\" title=\"FlatDarkLaf\" loading=\"lazy\"><\/div>\n<\/article>\n<p>Or use <code>FlatIntelliJLaf<\/code> for an IntelliJ-like look and feel:<\/p>\n<p>\u00a0<\/p>\n<article class=\"align-center media media--type-image media--view-mode-full\" title=\"IntelliJ light\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/03\/java-swing-intellij.jpeg\" width=\"608\" height=\"151\" alt=\"Screenshot of Swing in IntelliJ light version\" title=\"IntelliJ light\" loading=\"lazy\"><\/div>\n<\/article>\n<p>Or <code>FlatDarculaLaf<\/code> for a dark IntelliJ look and feel:<\/p>\n<p>\u00a0<\/p>\n<article class=\"align-center media media--type-image media--view-mode-full\" title=\"IntelliJ dark\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/03\/java-swing-intellij-dark.jpeg\" width=\"472\" height=\"161\" alt=\"Screenshot of a dark version of Swing in an IntelliJ theme\" title=\"IntelliJ dark\" loading=\"lazy\"><\/div>\n<\/article>\n<h2>Looking good, Java<\/h2>\n<p>Java Swing is an easy toolkit to use. It&#8217;s been well maintained for two decades, and it provides a great desktop experience.<\/p>\n<p>With look and feel libraries, Swing can look good, too.<\/p>\n<\/div>\n<div class=\"clearfix text-formatted field field--name-field-article-subhead field--type-text-long field--label-hidden field__item\">\n<p>Programming in Java doesn&#8217;t have to be ugly. Follow these simple steps to spruce up Java Swing.<\/p>\n<\/div>\n<div class=\"field field--name-field-lead-image field--type-entity-reference field--label-hidden field__item\">\n<article class=\"media media--type-image media--view-mode-caption\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/03\/laptop_screen_desk_work_chat_text-1.png\" width=\"1040\" height=\"584\" alt=\"Person using a laptop\" title=\"Person using a laptop\" loading=\"lazy\"><\/div>\n<\/article>\n<\/div>\n<div class=\"field field--name-field-tags field--type-entity-reference field--label-hidden field__items\">\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/tags\/java\" hreflang=\"en\">Java<\/a><\/div>\n<\/p><\/div>\n<div class=\"hidden field field--name-field-listicle-title field--type-string field--label-hidden field__item\">What to read next<\/div>\n<div class=\"field field--name-field-default-license field--type-list-string field--label-hidden field__item\"><a rel=\"license\" href=\"http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/\"><br \/>\n        <img decoding=\"async\" alt=\"Creative Commons License\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/03\/cc-by-sa-4-2.png\" title=\"This work is licensed under a Creative Commons Attribution-Share Alike 4.0 International License.\"><\/a>This work is licensed under a Creative Commons Attribution-Share Alike 4.0 International License.<\/div>\n<section class=\"field field--name-field-comments field--type-comment field--label-hidden comment-wrapper\">\n<div class=\"comments__count\">\n<div class=\"login\"><a href=\"https:\/\/opensource.com\/user\/register?absolute=1\">Register<\/a> or <a href=\"https:\/\/opensource.com\/user\/login?current=\/rss.xml&amp;absolute=1\">Login<\/a> to post a comment.<\/div>\n<\/p><\/div>\n<\/section>\n<p class=\"wpematico_credit\"><small>Powered by <a href=\"http:\/\/www.wpematico.com\" target=\"_blank\" rel=\"noopener\">WPeMatico<\/a><\/small><\/p>\n","protected":false},"excerpt":{"rendered":"<p>How to beautify your Java applications Seth Kenlon Fri, 03\/18\/2022 &#8211; 03:00 Up Register or Login to like. What&#8217;s not to love about Java? I love that Java lets me write applications on one platform and run them on other platforms. You don&#8217;t have to mess around with platform-specific SDKs, using a different library for [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":63011,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[307],"tags":[],"class_list":["post-63010","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-open-source"],"_links":{"self":[{"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/posts\/63010","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=63010"}],"version-history":[{"count":0,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/posts\/63010\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/media\/63011"}],"wp:attachment":[{"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=63010"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=63010"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=63010"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}