SWT Shell durch Event in der Größe verändern

Stelufl

Mitglied
Hallo,

ich habe ein Problem, dass ich nicht gelöst bekomme.
Undzwar will ich eine Shell haben, die ähnlich aussieht wie der Tooltip von Eclipse. Sprich ohne Titlebar, ohne Rahmen, nix. Dafür käme für mich SWT.Tool und SWT.NO_TRIM in frage. Ich hatte mich wegen des ansehnlichen Schattens für SWT.TOOL entschieden. Leider kann man dann aber die Shell nciht mehr Resizen. SWT.RESIZE dazuzupacken möchte ich auch nicht, denn dann hat die Shell wieder so einen hässlichen Rahmen.
Also muss ich das ganze selbst implementieren.
Kurze Erklärung: Die Shell wird über ein Klickevent aufgerufen und wird ihrerseits auf die aufrufende Shell gelegt. Die entsprechende Methode ist createResizeIcon() in Zeile 105. Jedoch funktioniert das nicht so richtig, beim Resizen flackert das wie verrückt, was daran liegt, dass die Shell nicht linear kleiner oder größer gemacht wird, sondern irgendwie teilweise mit ganz komischen Werten verändert wird. Es liegt wahrscheinlich an falschen Event koordinaten, das event liefert nämlich beim ersten Feuern die Koordinaten vom Label, nicht von der Shell. Die Koordinaten von der Shell liefert er interessanterweise dann beim zweiten Feuern. Er resized also zuerst auf die Koordinaten vom Label, also irgendwie 8,10 oder so und danach erst auf die "richtigen" Koordinaten. Wer weiß rat? toDisplay() und toControl() schon versucht.

Das ist meine Klasse:
Java:
public class OlderVersionsStatusPopUp extends Shell {

    private TopicTranslationData translationData;
    private Listener dragListener;
    private Point offset;
    private final Color BACKGROUND;
    private Image resizeImg;
    private TreeItem item;
    private Map<ObjectId, Boolean> popUpStati;
    private Listener resizeListener;
    private boolean pressed;

    public OlderVersionsStatusPopUp(Shell shell, TopicTranslationData data,
            Event e, Control parentControl, TreeItem item,
            final Map<ObjectId, Boolean> popUpStati) {

        super(shell, SWT.TOOL);
        this.translationData = data;
        this.item = item;
        this.popUpStati = popUpStati;
        BACKGROUND = new Color(getDisplay(), 255, 255, 174);

        Point bounds = parentControl.getLocation();
        Point control = parentControl.toControl(bounds.x, bounds.y);

        int x = -control.x + e.x + 20;
        int y = -control.y + e.y;

        setBounds(x, y, 350, 250);
        GridLayout shellLayout = new GridLayout(1, false);
        shellLayout.marginHeight = 0;
        shellLayout.marginWidth = 0;

        setLayout(shellLayout);
        setBackground(BACKGROUND);
        setBackgroundMode(SWT.INHERIT_DEFAULT);

        Composite mainComp = new Composite(getShell(), SWT.NONE);
        GridLayout mainLayout = new GridLayout(2, false);
        mainLayout.marginHeight = 0;
        mainLayout.verticalSpacing = 0;
        mainLayout.marginTop = 0;
        mainLayout.marginWidth = 0;
        mainLayout.horizontalSpacing = 0;
        mainComp.setLayout(mainLayout);
        GridDataFactory.fillDefaults().grab(true, true).applyTo(mainComp);

        Composite contentComp = new Composite(mainComp, SWT.NONE);
        GridLayout contentLayout = new GridLayout(2, false);
        contentComp.setLayout(contentLayout);
        GridDataFactory.fillDefaults().grab(true, true)
                .span(mainLayout.numColumns, 1).applyTo(contentComp);

        createTitle(item, contentComp);

        createResizeIcon();

        dragListener = new Listener() {
            public void handleEvent(Event event) {
                switch (event.type) {
                case SWT.MouseDown:
                    offset = new Point(event.x, event.y);
                    break;
                case SWT.MouseMove:
                    if (offset != null) {
                        Point location = toDisplay(event.x, event.y);
                        setLocation(location.x - offset.x, location.y
                                - offset.y);
                    }
                    break;
                case SWT.MouseUp:
                    if ((event.stateMask & SWT.BUTTON3) != 0) {
                        popUpStati.put(
                                translationData.getTopic().getObjectId(),
                                Boolean.valueOf(true));
                        OlderVersionsStatusPopUp.this.dispose();
                    }
                    offset = null;
                    break;
                }

            }
        };

        addListener(SWT.MouseDown, dragListener);
        addListener(SWT.MouseUp, dragListener);
        addListener(SWT.MouseMove, dragListener);

        open();
    }

    /**
     * @param item
     * @param contentComp
     */
    public void createTitle(TreeItem item, Composite contentComp) {
        CLabel titleLabel = new CLabel(contentComp, SWT.NONE);
        titleLabel.setImage(item.getImage());
        titleLabel.setText(translationData.getTopic().getTitle());
    }

    /**
     * 
     */
    public void createResizeIcon() {
        CLabel resizeLabel = new CLabel(getShell(), SWT.NONE);
        resizeImg = TMPlugin.getInstance().getImageDescriptor("RESIZE_PNG")
                .createImage();
        resizeLabel.setImage(resizeImg);
        pressed = false;
        resizeListener = new Listener() {

            public void handleEvent(Event e) {
                switch (e.type) {
                case SWT.MouseEnter:
                    setCursor(getShell().getDisplay().getSystemCursor(
                            SWT.CURSOR_SIZESE));
                    break;
                case SWT.MouseExit:
                    setCursor(getShell().getDisplay().getSystemCursor(
                            SWT.CURSOR_ARROW));
                    break;
                case SWT.MouseDown:
                    pressed = true;
                    break;
                case SWT.MouseMove:
                    if (pressed) {
                        Rectangle rect = getBounds();
                       
                        setSize(rect.width - (rect.width - e.x), rect.height
                                - (rect.height - e.y));
                    }
                    break;
                case SWT.MouseUp:
                    pressed = false;
                    break;

                }

            }

        };
        resizeLabel.addListener(SWT.MouseEnter, resizeListener);
        resizeLabel.addListener(SWT.MouseExit, resizeListener);
        resizeLabel.addListener(SWT.MouseDown, resizeListener);
        resizeLabel.addListener(SWT.MouseMove, resizeListener);
        resizeLabel.addListener(SWT.MouseUp, resizeListener);
        GridDataFactory.fillDefaults().align(SWT.RIGHT, SWT.BOTTOM)
                .applyTo(resizeLabel);
    }

    @Override
    protected void checkSubclass() {
        // Disable the check that prevents subclassing of SWT components
    }

    public TopicTranslationData getTopicTranslationData() {
        return translationData;
    }

    @Override
    public void dispose() {
        super.dispose();
        if (BACKGROUND != null && !BACKGROUND.isDisposed()) {
            BACKGROUND.dispose();
        }
        if (resizeImg != null && !resizeImg.isDisposed()) {
            resizeImg.dispose();
        }
    }

}
 

Madlip

Bekanntes Mitglied
Hast du es mal versucht die Methode in deiner Klasse zu überschreiben sprich die Titelbar überschreiben.

Ich habe es einfach "abgeschnitten" die Titelbar .... jetzt werden einige aufschreien ABER für meine zwecke hat es vollkommen gereicht.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Setzen von der Schriftgröße bei einem Shell AWT, Swing, JavaFX & SWT 15
T Shell entwickeln AWT, Swing, JavaFX & SWT 6
W SWT keybinding ESC bzw. [x] bei Shell (modal) AWT, Swing, JavaFX & SWT 2
W SWT, Shell - setMaximumSize AWT, Swing, JavaFX & SWT 2
lumo SWT Shell größe ändern... AWT, Swing, JavaFX & SWT 4
lumo SWT Shell & Menu AWT, Swing, JavaFX & SWT 2
H shell in view implementieren; menu mit keystroke unterlegen AWT, Swing, JavaFX & SWT 8
hdi SWT Zwei mal Shell öffnen = Exception AWT, Swing, JavaFX & SWT 6
HaukeG SWT Grundsätzliches über Composites, Shell und Displays AWT, Swing, JavaFX & SWT 2
C SWT Shell update probleme - Mausbewegung nötig AWT, Swing, JavaFX & SWT 2
hdi SWT Shell: Auslagerung von Code verändert Verhalten AWT, Swing, JavaFX & SWT 6
M SWT Mutter-Shell blocken während Tochter-Shell noch offen ist AWT, Swing, JavaFX & SWT 6
E NoClassDefFoundError beim Starten einer Shell AWT, Swing, JavaFX & SWT 3
S SWT Lösen mit Shell, Container oder Group? AWT, Swing, JavaFX & SWT 5
M Shell vs. Composite AWT, Swing, JavaFX & SWT 3
V [SWT] Shell transparenz AWT, Swing, JavaFX & SWT 3
M Fehler beim Zugriff von awt-KeyListener auf swt-Shell AWT, Swing, JavaFX & SWT 2
U Maximieren für SWT Shell unterbinden AWT, Swing, JavaFX & SWT 2
B SWT-Shell in den Vordergrund bringen AWT, Swing, JavaFX & SWT 2
T SWT - Inhalt einer Shell erst nach Größenänderung vorhanden AWT, Swing, JavaFX & SWT 5
C ApplicationWindow Shell minimieren (Anderes Event ausführen) AWT, Swing, JavaFX & SWT 4
I Shell aus einer Plugin-View öffnen . AWT, Swing, JavaFX & SWT 4
Z MessageBox ohne Shell öffnen - SWT AWT, Swing, JavaFX & SWT 7
P Icongröße von SystemIcons (aus shell) verändern?! AWT, Swing, JavaFX & SWT 3
P JTextfield Text durch Keylistener verändern AWT, Swing, JavaFX & SWT 4
N JavaFX Vor beenden der Anwendung durch klicken von X Dialog zeigen AWT, Swing, JavaFX & SWT 1
L JButton durch Mausklick auslösen und Enter-Taste AWT, Swing, JavaFX & SWT 2
pkm MainFrame durch Actionlistener auffrischen, aber wie? AWT, Swing, JavaFX & SWT 2
J Java Datei durch CMD mit Parameter ausführen AWT, Swing, JavaFX & SWT 1
A Panelwechsel durch RadioButtons AWT, Swing, JavaFX & SWT 1
J Falsches Rendern durch JCheckBox in eigenem JTree AWT, Swing, JavaFX & SWT 6
W Zweites/neues Fenster durch Button öffnen AWT, Swing, JavaFX & SWT 6
Monokuma 2D-Grafik Imageimport durch eine gezeichnete Form ersetzen AWT, Swing, JavaFX & SWT 16
N Aufruf einer anderen Klasse durch Button ActionListener AWT, Swing, JavaFX & SWT 2
T Anderen Java Code durch Code kompilieren und Fehler in Label ausgeben AWT, Swing, JavaFX & SWT 5
L JavaFX JavaFX stürtzt durch einen Server#connect Exception AWT, Swing, JavaFX & SWT 3
S Java GUI durch variable Größe einer Map anpassen AWT, Swing, JavaFX & SWT 3
S JavaFX Tab durch Enter ersetzten AWT, Swing, JavaFX & SWT 3
M Swing Durch Usereingabe neues Objekt AWT, Swing, JavaFX & SWT 2
L Java- UI zweites Fenster aus einer anderen Klasse öffnen durch ButtonClick AWT, Swing, JavaFX & SWT 4
C JavaFX Inhalt eines SplitPane's durch Menü-Auswahl ändern? AWT, Swing, JavaFX & SWT 13
S Speicher Leak durch Tabellenaktualisierung AWT, Swing, JavaFX & SWT 5
U Swing Inhalt vom Fenster wird erst durch Hovern oder Klicken sichtbar AWT, Swing, JavaFX & SWT 3
A JButton soll durch anklicken die Farbe wechseln AWT, Swing, JavaFX & SWT 8
N Swing Abfrage durch JTextField nach Button betätigung AWT, Swing, JavaFX & SWT 3
H zwei gleich große Panels getrennt durch ein weiteres Panel AWT, Swing, JavaFX & SWT 10
R Swing Durch JComboBox-Item eine TextArea aktualisieren AWT, Swing, JavaFX & SWT 2
C Durch klicken von Button neues Fenster oeffnen AWT, Swing, JavaFX & SWT 18
T Durch klicken eines Buttons Klasse wechseln AWT, Swing, JavaFX & SWT 2
B EventHandler für durch Tastenkombination erzeugte Zeichen AWT, Swing, JavaFX & SWT 3
D Swing keine JLabel-Aktualisierung bei "externem" Aufruf durch Helferklasse AWT, Swing, JavaFX & SWT 10
S AWT JTextFields durch Array im JMenu erzeugen? AWT, Swing, JavaFX & SWT 19
J JTable bounds ändern durch resizing des Fensters AWT, Swing, JavaFX & SWT 9
stylegangsta JLabel durch Klick auf JButton einblenden AWT, Swing, JavaFX & SWT 16
G Swing Durch GlassPane auf Button klicken und ActionEvent auslösen AWT, Swing, JavaFX & SWT 0
K Swing Durch Methode erzeugte Buttons ansteuern AWT, Swing, JavaFX & SWT 5
K JTable komplett durch andere ersetzen AWT, Swing, JavaFX & SWT 4
P Programm durch Dateiaufruf starten und Datei öffnen AWT, Swing, JavaFX & SWT 2
G Swing ComboBox: Auswahl eines Items der Liste durch Eingabe eines Buchstabens AWT, Swing, JavaFX & SWT 3
Z JavaFX Inhalt einer ViewTable durch Aktion einer Menubar ändern welche in einer anderen fxml ist AWT, Swing, JavaFX & SWT 4
R AWT AWT Textfeld durch Klick auf Button erstellen? AWT, Swing, JavaFX & SWT 3
F 2D-Grafik Objekt durch Einwirkung einer Kraft im Raum bewegen AWT, Swing, JavaFX & SWT 14
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
P JFrame manuell Grösse verändern durch 'mouseDragged' AWT, Swing, JavaFX & SWT 3
Messoras JWindow/Frame durch das man durchklicken kann AWT, Swing, JavaFX & SWT 5
P Rendern von Geraden im 3 dimensionalen Raum durch Rotationen AWT, Swing, JavaFX & SWT 0
S Swing Navigation durch JPanels AWT, Swing, JavaFX & SWT 0
D Swing Durch JFRAME hindurch klicken AWT, Swing, JavaFX & SWT 2
C Swing Durch Inhaltsänderung eines JTextfields eine Funktion aufrufen AWT, Swing, JavaFX & SWT 5
achillesat SWT Browser öffnen durch Button click AWT, Swing, JavaFX & SWT 5
R JButton durch Enter auslösen AWT, Swing, JavaFX & SWT 7
S Canvas durch transparentes JPanel sichtbar machen AWT, Swing, JavaFX & SWT 2
K Zugriff auf Label und Ereignisbehandlung durch zwei Handlerklassen AWT, Swing, JavaFX & SWT 3
S Objekt durch Tasteneingabe mehrmals drehen AWT, Swing, JavaFX & SWT 9
A Minimalestopuhr: JLabel.setText() durch eigenes Event ändern AWT, Swing, JavaFX & SWT 6
A Swing JTextField durch einen JButton leeren AWT, Swing, JavaFX & SWT 15
A Swing Anpassen der Spaltenbreite durch die länge eines Strings AWT, Swing, JavaFX & SWT 3
P JPanel- Listener durch JTextArea aktivieren AWT, Swing, JavaFX & SWT 8
P Durch Bilder Scrollen AWT, Swing, JavaFX & SWT 2
J Swing JButton durch Eingabe von Zahlen in JTextFields aktivieren AWT, Swing, JavaFX & SWT 3
A JComboBox-Inhalt durch neues Array ersetzen AWT, Swing, JavaFX & SWT 2
L Border verschwindet durch Graphics.drawImage() AWT, Swing, JavaFX & SWT 4
S Swing Scrollpanes: wie kann ich durch Java-Code an den "Anfang" scrollen AWT, Swing, JavaFX & SWT 8
M Swing JMenu verdeckt durch Komponente (aber kein AWT und Swing mix!?) AWT, Swing, JavaFX & SWT 3
C Swing Fensterresize durch doppelklick - wie die neue Grösse erhalten? AWT, Swing, JavaFX & SWT 3
V Applet JApplet Flackern durch Repaint AWT, Swing, JavaFX & SWT 11
F Drag & Drop durch Verbindungslinien AWT, Swing, JavaFX & SWT 10
F Wert durch ActionListener an Klasse übergeben AWT, Swing, JavaFX & SWT 3
L SWT Text SelectionText ersetzen durch anderen String AWT, Swing, JavaFX & SWT 6
O keine ähnliche Farben durch Random in Java AWT, Swing, JavaFX & SWT 21
L ListSelectionListener durch Code auslösen AWT, Swing, JavaFX & SWT 3
M Ein Tab eine JTabbedPane durch Button Druck öffen AWT, Swing, JavaFX & SWT 2
Shanks Hintergrundfarbe durch Button click ändern ?? AWT, Swing, JavaFX & SWT 6
R Durch Listener lässt sich Programm nicht mehr ausführen AWT, Swing, JavaFX & SWT 4
G Zeile in JTable durch rechte Maustaste manipulieren AWT, Swing, JavaFX & SWT 4
E Swing CellEditor mit Combobox durch Tastatureingabe editieren?! AWT, Swing, JavaFX & SWT 3
G Menü verschwindet durch .setText() AWT, Swing, JavaFX & SWT 4
A JScrollBar durch Button ersetzten AWT, Swing, JavaFX & SWT 2
xehpuk Swing Komponenten werden durch setFont() winzig AWT, Swing, JavaFX & SWT 3
T neues Fenster durch Button öffnen funktioniert nicht!! AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben