コンポーネントが本来あるべき場所にカーソルを合わせたときにのみコンポーネントが描画される理由を誰かが説明できますか?
どこにでもドラッグできるフチなしフレームを設定し、右上に終了ボタンを作成しようとしていますが、カーソルを合わせるまで描画されません。JFrameに背景画像をペイントしてから、ボタンを描画して全体を表示します。
import java.awt.*;
import java.awt.event.*;
import javax.imageio.ImageIO;
import javax.swing.*;
public class GUI extends JFrame
{
private Image Background = null;
private static Point Offset = new Point();
public GUI() {
this.setUndecorated(true);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
AddListeners();
SetCustomTheme();
LoadBackground();
Layout();
pack();
this.setSize(300, 300);
this.setVisible(true);
}
private void Layout() {
GroupLayout Info = new GroupLayout(this.getContentPane());
this.getContentPane().setLayout(Info);
JButton Button = new JButton();
Info.setHorizontalGroup(
Info.createSequentialGroup()
.addComponent(Button)
);
Info.setVerticalGroup(
Info.createParallelGroup()
.addComponent(Button)
);
}
private void SetCustomTheme() {
try {
UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
}
private void LoadBackground() {
try {
Background = ImageIO.read(getClass().getResource("Images/meh.png"));
} catch (Exception Ex) {
}
}
private void SetCustomIcon() {
Image Icon = Toolkit.getDefaultToolkit().getImage("Images/lol.jpg");
setIconImage(Icon);
}
private void AddListeners() {
this.addMouseListener(new MouseAdapter() {
@Override public void mousePressed(MouseEvent e) {
Offset.x = e.getX();
Offset.y = e.getY();
}
});
this.addMouseMotionListener(new MouseMotionAdapter() {
@Override public void mouseDragged(MouseEvent e) {
Point p = getLocation();
setLocation(p.x + e.getX() - Offset.x, p.y + e.getY() - Offset.y);
}
});
}
@Override public void paint(Graphics g) {
g.drawImage(Background, 0,0,this.getWidth(),this.getHeight(), null);
}
}