I am making a custom title bar in swing, and when I use a letter "x" for the close button, it works fine. But when I replace it with an icon, the whole title bar disappears, until I hover the close button, which makes only the close button appear. Here is a snippet of my code:
// Create title bar
JPanel titleBar = new JPanel();
titleBar.setBackground(new Color(0x343434));
titleBar.setSize(screenSize.width, 36);
JButton closeButton = new JButton();
closeButton.setBackground(new Color(0, 0, 0, 0));
closeButton.setIcon(new ImageIcon(ImageIO.read(new File("src/close.png")).getScaledInstance(16, 16, Image.SCALE_SMOOTH)));
closeButton.setSize(50, 36);
closeButton.setLocation(screenSize.width - 50, 0);
closeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
window.dispatchEvent(new WindowEvent(window, WindowEvent.WINDOW_CLOSING));
}
});
closeButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(MouseEvent e) {
closeButton.setBackground(Color.RED);
}
public void mouseExited(MouseEvent e) {
closeButton.setBackground(new Color(0x343434));
}
});
closeButton.setBorder(null);
closeButton.setFocusPainted(false);
titleBar.add(closeButton);
window.add(titleBar);
Edit: it works sometimes now, but sometimes it doesn't. Here is the new code:
public class Main {
public static void main(String[] args) throws IOException {
// Get screen size
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
// Create window
JFrame window = new JFrame();
//Get taskbar size
Insets screenInsets = Toolkit.getDefaultToolkit().getScreenInsets(window.getGraphicsConfiguration());
int taskBarHeight = screenInsets.bottom;
// Configure window
window.setSize(screenSize.width, screenSize.height - taskBarHeight);
window.getContentPane().setBackground(new Color(0x232323));
window.setUndecorated(true);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);
// Create title bar
JPanel titleBar = new JPanel();
titleBar.setBackground(new Color(0x343434));
titleBar.setSize(screenSize.width, 36);
JButton closeButton = new JButton();
closeButton.setBackground(new Color(0x343434));
Image closeImg = ImageIO.read(new File("src/close.png")).getScaledInstance(16, 16, 4);
closeButton.setIcon(new ImageIcon(closeImg));
closeButton.setSize(50, 36);
closeButton.setLocation(screenSize.width - 50, 0);
closeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
window.dispatchEvent(new WindowEvent(window, WindowEvent.WINDOW_CLOSING));
}
});
closeButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(MouseEvent e) {
closeButton.setBackground(Color.RED);
}
public void mouseExited(MouseEvent e) {
closeButton.setBackground(new Color(0x343434));
}
});
closeButton.setBorder(null);
closeButton.setFocusPainted(false);
titleBar.add(closeButton);
window.add(titleBar);
}
}