This repository has been archived on 2021-02-18. You can view files and clone it, but cannot push or open issues or pull requests.
chess/src/main/java/dev/kske/chess/ui/GameTabComponent.java

120 lines
2.9 KiB
Java
Raw Normal View History

2019-12-11 14:02:31 +01:00
package dev.kske.chess.ui;
2020-01-19 22:12:33 +01:00
import java.awt.*;
2019-12-11 21:23:35 +01:00
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
2019-12-11 14:02:31 +01:00
2020-01-19 22:12:33 +01:00
import javax.swing.*;
2019-12-11 21:23:35 +01:00
import javax.swing.plaf.basic.BasicButtonUI;
2019-12-11 14:02:31 +01:00
/**
2020-01-19 22:12:33 +01:00
* Renders the title and the closing button of a {@link JTabbedPane}.<br>
* <br>
2019-12-11 14:02:31 +01:00
* Project: <strong>Chess</strong><br>
* File: <strong>GameTabComponent.java</strong><br>
* Created: <strong>11 Dec 2019</strong><br>
*
* @author Kai S. K. Engelbart
*/
public class GameTabComponent extends JPanel {
2019-12-11 21:23:35 +01:00
private final JTabbedPane tabbedPane;
2019-12-11 14:02:31 +01:00
private static final long serialVersionUID = 9022979950018125935L;
2020-01-19 22:12:33 +01:00
/**
* Creates an instance of {@link GameTabComponent}.
*
* @param tabbedPane the tabbed pane which contains this
* {@link GameTabComponent}
*/
2019-12-11 14:02:31 +01:00
public GameTabComponent(JTabbedPane tabbedPane) {
super(new FlowLayout(FlowLayout.LEFT, 0, 0));
if (tabbedPane == null)
throw new NullPointerException("TabbedPane is null");
2019-12-11 21:23:35 +01:00
this.tabbedPane = tabbedPane;
2019-12-11 14:02:31 +01:00
// Create title JLabel
2019-12-11 21:23:35 +01:00
JLabel label = new JLabel() {
2019-12-11 14:02:31 +01:00
private static final long serialVersionUID = 7902391411509551586L;
@Override
public String getText() {
int i = tabbedPane.indexOfTabComponent(GameTabComponent.this);
return i != -1 ? tabbedPane.getTitleAt(i) : "";
}
2019-12-11 21:23:35 +01:00
};
label.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5));
add(label);
// Create close JButton
add(new TabButton());
setBorder(BorderFactory.createEmptyBorder(2, 0, 0, 0));
}
private class TabButton extends JButton {
private static final long serialVersionUID = -2757857832337636731L;
public TabButton() {
final int size = 17;
setPreferredSize(new Dimension(size, size));
setToolTipText("Close this tab");
setUI(new BasicButtonUI());
setContentAreaFilled(false);
setFocusable(false);
setBorder(BorderFactory.createEtchedBorder());
setBorderPainted(false);
addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent evt) {
setBorderPainted(true);
}
2019-12-11 21:23:35 +01:00
@Override
public void mouseExited(MouseEvent evt) {
setBorderPainted(false);
}
2019-12-11 21:23:35 +01:00
});
setRolloverEnabled(true);
addActionListener(evt -> {
int i = tabbedPane.indexOfTabComponent(GameTabComponent.this);
if (i != -1)
tabbedPane.remove(i);
});
2019-12-11 21:23:35 +01:00
}
@Override
public void updateUI() {}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g.create();
// shift the image for pressed buttons
if (getModel().isPressed())
g2.translate(1, 1);
2019-12-11 21:23:35 +01:00
g2.setStroke(new BasicStroke(2));
g2.setColor(Color.BLACK);
if (getModel().isRollover())
g2.setColor(Color.MAGENTA);
2019-12-11 21:23:35 +01:00
final int delta = 6;
g2.drawLine(
delta,
delta,
getWidth() - delta - 1,
getHeight() - delta - 1
);
g2.drawLine(
getWidth() - delta - 1,
delta,
delta,
getHeight() - delta - 1
);
2019-12-11 21:23:35 +01:00
g2.dispose();
}
2019-12-11 14:02:31 +01:00
}
}