import java.awt.Color;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.plaf.basic.BasicTabbedPaneUI;
public class JCloseableTabbedPaneUI extends BasicTabbedPaneUI {
public JCloseableTabbedPaneUI() {
super();
}
protected void paintTab(Graphics g, int tabPlacement, Rectangle[] rects, int tabIndex, Rectangle iconRect,
Rectangle textRect) {
super.paintTab(g, tabPlacement, rects, tabIndex, iconRect, textRect);
Rectangle rect = rects[tabIndex];
g.setColor(Color.black);
g.drawRect(rect.x + 5, rect.y + 5, 10, 10);
g.drawLine(rect.x + 5, rect.y + 5, rect.x + 15, rect.y + 15);
g.drawLine(rect.x + 15, rect.y + 5, rect.x + 5, rect.y + 15);
}
protected int calculateTabWidth(int tabPlacement, int tabIndex, FontMetrics metrics) {
return super.calculateTabWidth(tabPlacement, tabIndex, metrics) + 20;
}
protected MouseListener createMouseListener() {
return new ClosableTabMouseHandler();
}
class ClosableTabMouseHandler extends MouseHandler {
public ClosableTabMouseHandler() {
super();
}
public void mouseClicked(MouseEvent e) {
int x = e.getX();
int y = e.getY();
int tabIndex = -1;
int tabCount = tabPane.getTabCount();
f:for (int i = 0; i < tabCount; i++) {
if (rects[i].contains(x, y)) {
tabIndex = i;
break f;
}
}
if (tabIndex >= 0) {
Rectangle tabRect = rects[tabIndex];
x = x - tabRect.x;
y = y - tabRect.y;
if ((x >= 5) && (x <= 15) && (y >= 5) && (y <= 15))
tabPane.remove(tabIndex);
}
}
}
}
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1
at javax.swing.plaf.basic.BasicTabbedPaneUI.getTabBounds(Unknown Source)
at javax.swing.plaf.basic.BasicTabbedPaneUI.getTabBounds(Unknown Source)
at javax.swing.plaf.basic.BasicTabbedPaneUI$Handler.focusLost(Unknown Source)
at java.awt.Component.processFocusEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Titel | Forum | Antworten | Datum | |
---|---|---|---|---|
K | JTabs werden nicht angezeigt | AWT, Swing, JavaFX & SWT | 6 |