Non-Resizable Window Borders and Positioning
When creating non-resizable JFrames with Windows Aero enabled, the setLocation method does not adjust for the window border correctly, resulting in overlapping borders. This can be observed when positioning two frames side by side.
To resolve this issue, it's important to understand the limitations and caveats of setting bounds for non-resizable containers. When adjusting the bounds for a non-resizable container, it's crucial to ensure that any text remains visible regardless of platform-specific font differences.
To illustrate these challenges, consider the following example:
import java.awt.BorderLayout; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingUtilities; public class Evil extends JPanel { private static final String s = "Tomorrow's winning lottery numbers: 42, "; private JLabel label = new JLabel(s + "3, 1, 4, 1, 5, 9", JLabel.LEFT); public Evil() { this.add(label); } private void display() { JFrame f = new JFrame("Evil"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(this, BorderLayout.WEST); f.pack(); int w = SwingUtilities.computeStringWidth( label.getFontMetrics(label.getFont()), s); int h = f.getHeight(); f.setSize(w, h); f.setResizable(false); f.setLocationRelativeTo(null); f.setVisible(true); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { new Evil().display(); } }); } }
In this example, a non-resizable JPanel is created with a JLabel that displays a string of lottery numbers. The JFrame's size is set based on the text's width and height. When the frame is shown, its width is reduced to accommodate the string's width. However, if the user's platform has a font with larger FontMetrics, the label's text may become truncated, rendering the lottery numbers incomplete.
Therefore, it's recommended to use caution when modifying the bounds of non-resizable containers. If necessary, consider using a combination of relative positioning and resizing of component elements to maintain visibility and desired functionality.
The above is the detailed content of How to Correctly Position Non-Resizable JFrames with Windows Aero Enabled?. For more information, please follow other related articles on the PHP Chinese website!