Hallo werte Programmierkollegen/Innen,
ich würde gerne die Tabreihenfolge zur Laufzeit ändern können, doch leider ist die Drag&Drop-Unterstützung für die Klasse JTabbedPane quasi nicht vorhanden.
Also habe ich einen MouseListener und MouseMotionListener geschrieben (siehe unten). Eigentlich keine große Sache.. EIGENTLICH. Leider funktioniert es zwar soweit, aber wenn ich ein bisschen herumprobiere, verschwindet zwischendurch immer mal ein Tab, wird einfach gelöscht! Liegt vielleicht an der Methode insertTab() bzw. an dem "Vector", in dem die Tabs gespeichert werden. Keine Ahnung. Aber das darf im Programm auf keinen Fall vorkommen!
Hat jemand von euch eine Idee, wie ich das verhindern kann? Mein Quelltext sieht -nach vielen Versuchen- so aus:
(Es handelt sich übrigens um einen normalen JTabbedPane mit eigenen, von JPanel abgeleiteten Komponenten, also nichts besonderes.)
Danke schonmal im Voraus.
ich würde gerne die Tabreihenfolge zur Laufzeit ändern können, doch leider ist die Drag&Drop-Unterstützung für die Klasse JTabbedPane quasi nicht vorhanden.
Also habe ich einen MouseListener und MouseMotionListener geschrieben (siehe unten). Eigentlich keine große Sache.. EIGENTLICH. Leider funktioniert es zwar soweit, aber wenn ich ein bisschen herumprobiere, verschwindet zwischendurch immer mal ein Tab, wird einfach gelöscht! Liegt vielleicht an der Methode insertTab() bzw. an dem "Vector", in dem die Tabs gespeichert werden. Keine Ahnung. Aber das darf im Programm auf keinen Fall vorkommen!
Hat jemand von euch eine Idee, wie ich das verhindern kann? Mein Quelltext sieht -nach vielen Versuchen- so aus:
(Es handelt sich übrigens um einen normalen JTabbedPane mit eigenen, von JPanel abgeleiteten Komponenten, also nichts besonderes.)
Java:
package events;
import java.awt.Component;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.Icon;
import javax.swing.JTabbedPane;
public class TabDragAndDrop implements MouseMotionListener, MouseListener {
private int draggedIndex = -1;
private Component draggedComp;
private String draggedtitle;
private String draggedTipText;
private Icon draggedIcon;
@Override
public void mouseDragged(MouseEvent e) {
JTabbedPane pane = (JTabbedPane)e.getComponent();
int index = pane.indexAtLocation(e.getPoint().x, e.getPoint().y);
if(index < 0) return;
if(this.draggedIndex < 0){
this.draggedIndex = index;
this.draggedComp = pane.getComponent(index);
this.draggedtitle = pane.getTitleAt(index);
this.draggedTipText = pane.getToolTipTextAt(index);
this.draggedIcon = pane.getIconAt(index);
}
else {
pane.setSelectedIndex(index);
}
}
@Override
public void mouseMoved(MouseEvent e) {
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
if(e.getButton() != MouseEvent.BUTTON1 || this.draggedIndex < 0) return;
JTabbedPane pane = (JTabbedPane)e.getComponent();
int dropIndex = pane.indexAtLocation(e.getPoint().x, e.getPoint().y);
if(dropIndex < 0 || dropIndex == this.draggedIndex) {
this.draggedIndex = -1;
return;
}
pane.remove(this.draggedIndex);
if(this.draggedIndex > dropIndex) dropIndex++;
pane.insertTab(this.draggedtitle, this.draggedIcon,
this.draggedComp, this.draggedTipText, dropIndex);
this.draggedIndex = -1;
}
}
Danke schonmal im Voraus.