package org.kodejava.swing;
import javax.swing.*;
import java.awt.*;
public class JLabelDemo extends JFrame {
public JLabelDemo() throws HeadlessException {
initialize();
}
private void initialize() {
setSize(150, 300);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
// Create some JLabel with Texts and define the horizontal alignment
JLabel label1 = new JLabel("Username :", JLabel.RIGHT);
JLabel label2 = new JLabel("Password :", JLabel.RIGHT);
JLabel label3 = new JLabel("Confirm Password :", JLabel.RIGHT);
JLabel label4 = new JLabel("Remember Me!", JLabel.LEFT);
JLabel label5 = new JLabel("Hello, Anybody There?", JLabel.CENTER);
// Set the vertical alignment for label5 and also set a tool tip for it
label5.setVerticalAlignment(JLabel.TOP);
label5.setToolTipText("I have a tool tip with me!");
getContentPane().add(label1);
getContentPane().add(label2);
getContentPane().add(label3);
getContentPane().add(label4);
getContentPane().add(label5);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new JLabelDemo().setVisible(true));
}
}
Tag Archives: Swing
How do I get the JFrame of a component?
This code snippet gives an example on how to get the JFrame of a component. In this example we try to get the JFrame from a button action listener event. To get the JFrame we utilize the SwingUtilities.getRoot() method and this will return the root component of the component tree in out small program below which is a JFrame.
Beside getting the JFrame, in this program we also do small stuff like changing the frame background color by a random color every time a user presses the “Change Frame Color” button.
package org.kodejava.swing;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import java.awt.Color;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.HeadlessException;
public class GetFrameDemo extends JFrame {
public GetFrameDemo() throws HeadlessException {
initialize();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new GetFrameDemo().setVisible(true));
}
private void initialize() {
this.setSize(500, 500);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
this.setLayout(new FlowLayout(FlowLayout.CENTER));
final JLabel rLabel = new JLabel("r: ");
final JLabel gLabel = new JLabel("g: ");
final JLabel bLabel = new JLabel("b: ");
JButton button = new JButton("Change Frame Background Color");
button.addActionListener(e -> {
Component component = (Component) e.getSource();
// Returns the root component for the current component tree
JFrame frame = (JFrame) SwingUtilities.getRoot(component);
int r = (int) (Math.random() * 255);
int g = (int) (Math.random() * 255);
int b = (int) (Math.random() * 255);
rLabel.setText("r: " + r);
gLabel.setText("g: " + g);
bLabel.setText("b: " + b);
frame.getContentPane().setBackground(new Color(r, g, b));
});
this.getContentPane().add(button);
this.getContentPane().add(rLabel);
this.getContentPane().add(gLabel);
this.getContentPane().add(bLabel);
}
}
How do I disable JFrame close button?
To disable the close operation on a JFrame, when user click the close icon on the JFrame, we can set the value of the default close operation to WindowConstants.DO_NOTHING_ON_CLOSE.
package org.kodejava.swing;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.HeadlessException;
public class DisableCloseButtonDemo extends JFrame {
public DisableCloseButtonDemo() throws HeadlessException {
initialize();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new DisableCloseButtonDemo().setVisible(true));
}
private void initialize() {
// WindowConstants.DO_NOTHING_ON_CLOSE tell JFrame instance to do
// nothing when a window closing event occurs.
this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
JButton button = new JButton("Close");
button.addActionListener(e -> System.exit(0));
this.setLayout(new FlowLayout(FlowLayout.CENTER));
this.setSize(new Dimension(500, 500));
this.getContentPane().add(button);
}
}
How do I use SwingWorker to perform background tasks?
This demo gives examples of using the SwingWorker class. The purpose of SwingWorker is to implement a background thread that you can use to perform time-consuming operations without affecting the performance of your program’s GUI.
package org.kodejava.swing;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;
import javax.swing.WindowConstants;
import java.awt.Dimension;
import java.awt.FlowLayout;
public class SwingWorkerDemo extends JFrame {
public SwingWorkerDemo() {
initialize();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new SwingWorkerDemo().setVisible(true));
}
private void initialize() {
this.setLayout(new FlowLayout());
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JButton processButton = new JButton("Start");
JButton helloButton = new JButton("Hello");
processButton.addActionListener(event -> {
LongRunProcess process = new LongRunProcess();
try {
process.execute();
} catch (Exception e) {
e.printStackTrace();
}
});
helloButton.addActionListener(e ->
JOptionPane.showMessageDialog(null, "Hello There"));
this.getContentPane().add(processButton);
this.getContentPane().add(helloButton);
this.pack();
this.setSize(new Dimension(500, 500));
}
static class LongRunProcess extends SwingWorker<Integer, Integer> {
protected Integer doInBackground() {
int result = 0;
for (int i = 0; i < 10; i++) {
try {
result += i * 10;
System.out.println("Result = " + result);
// Sleep for a while to simulate a long process
Thread.sleep(5000);
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
}
@Override
protected void done() {
System.out.println("LongRunProcess.done");
}
}
}


