import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Component; 
import java.awt.Container; 
import java.awt.Dimension; 
import java.awt.FlowLayout; 
import java.awt.Font; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Insets; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.WindowEvent; 
import java.text.NumberFormat; 
import javax.swing.BorderFactory; 
import javax.swing.Box; 
import javax.swing.BoxLayout; 
import javax.swing.JButton; 
import javax.swing.JEditorPane; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextArea; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 
import javax.swing.UIManager; 
import javax.swing.border.EtchedBorder; 
import javax.swing.event.ChangeEvent; 
import javax.swing.event.ChangeListener; 

public class Main extends JFrame { 

private testThreadLockPanel tstPanel; 
public static void main(String[] args) { 
new Main(); 
} 
   
public Main() { 

//for (int i=0; i<0; i++) { 
//	KeepCPUBusyThread t = new KeepCPUBusyThread(); 
//	t.start(); 
//} 
//try { Thread.sleep(1000); } catch (InterruptedException e) {} 

tstPanel = new testThreadLockPanel(); 

} 

//class KeepCPUBusyThread extends Thread { 
//	public void run() { 
//	float a; 
//	for (int k = 0; k < 2; k++) 
//	for (int j = 0; j < 500000000; j++) 
//	for (int i = 0; i < 500000000; i++) 
//	a = (i*j)/1000; 
//	} 
//} 

private class testThreadLockPanel extends JFrame implements ActionListener { 

private JTextField displayScaleField = new JTextField(5); 

public testThreadLockPanel() { 

this.setTitle("Test Panel"); 
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 
setBackground(new Color (217, 227, 232)); 

JPanel topPanel = new JPanel(); 
topPanel.setBackground(new Color (217, 227, 232)); 
topPanel.setOpaque(true); 

JPanel boxPanel = new JPanel(); 
boxPanel.setOpaque(false); 
boxPanel.setLayout(new BoxLayout(boxPanel, BoxLayout.Y_AXIS)); 
boxPanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory 
.createEmptyBorder(0, 0, 0, 0), BorderFactory 
.createEtchedBorder(EtchedBorder.LOWERED))); 

JPanel headerPanel = new JPanel(); 
headerPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); 
headerPanel.setBackground(new Color(171, 194, 211)); 
headerPanel.setOpaque(true); 
JLabel text = new JLabel("Configure Display Scaling:", JLabel.LEFT); 
text.setFont(text.getFont().deriveFont(12.0f).deriveFont(Font.BOLD)); 
headerPanel.add(text); 
boxPanel.add(headerPanel); 

NumberFormat nf = NumberFormat.getInstance(); // otherwise it's a decimal number eg 1.2 
nf.setMinimumFractionDigits(1); 
String text2 = "Display scaling can be used to increase the size of program windows and fonts for improved readability on high resolution displays. <br><br>By default, the scale is set automatically based on the display resolution. To override this behavior, enter a value below between " + nf.format(1.0) + " and " + nf.format(3.0) + ". To restore the default behavior, leave this field blank."; 
JEditorPane scalingMsgArea = new JEditorPane("text/html", text2); 
scalingMsgArea.setEditable(false); 
scalingMsgArea.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, Boolean.TRUE); 
scalingMsgArea.setFont(UIManager.getFont("Label.font").deriveFont(12.0f).deriveFont(Font.PLAIN)); 
scalingMsgArea.setOpaque(false); 
scalingMsgArea.setBorder( 
BorderFactory.createEmptyBorder(25, 20, 10, 20)); 

// uncomment sleep to let object setup complete, which prevents thread lock 
//try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } 

boxPanel.add(scalingMsgArea); 


JPanel footerPanel = new JPanel(); 
footerPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); 
footerPanel.setBorder( 
BorderFactory.createEmptyBorder(10,20,10,20)); 
footerPanel.setOpaque(false); 
JLabel text3 = new JLabel("Note: Changes do not take effect until the program is restarted.", JLabel.LEFT); 
text3.setFont(text3.getFont().deriveFont(12.0f).deriveFont(Font.PLAIN)); 
footerPanel.add(text3); 
boxPanel.add(footerPanel); 

topPanel.add(boxPanel); 
boxPanel.setPreferredSize(new Dimension(520, 330)); 
this.add(topPanel); 
this.pack(); 
this.setLocationRelativeTo(null); 
this.setVisible(true);	
} 

protected void processWindowEvent(WindowEvent e) { 
if (e.getID() == WindowEvent.WINDOW_CLOSING) { 
System.exit(0); 
} 
} 
public void actionPerformed(ActionEvent evt) { } 
} 
} 