Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    107

    Spostare una GUI sprovvista di TitleBar

    Ciao a tutti
    ho eliminato dalla mia GUI la TitleBar (perchè quella blu di Windows è orrenda) con setUndecorated(true) e adesso mi ritrovo sprovvisto di pulsanti di riduzione, ingrandimento e chiusura e impossibilitato a spostare la GUI stessa. Per chiudere il programma ho risolto mettendo un JButton con relativo ascoltatore. Per spostare la GUI avevo utilizzato il seguente motodo:
    codice:
    public JFrame getThis(){
      return this;
    }
    
    public class MouseAsc extends MouseMotionAdapter {
      public void mouseDragged(MouseEvent e){
        int x = e.getX();
        int y = e.getY();
        getThis().setLocation(x, y);
      }
    }
    Però mi si sfarfalla tutto quando sposto la GUI e per di più non me la sposta nella posizione che voglio io, forse perchè e.getX() ti restituisce il punto X all'interno della GUI non del Desktop...

    Come potrei fare secondo voi? Grazie
    Giovanni

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: Spostare una GUI sprovvista di TitleBar

    Originariamente inviato da diablo85
    Ciao a tutti
    ho eliminato dalla mia GUI la TitleBar (perchè quella blu di Windows è orrenda) con setUndecorated(true)
    Rimetti la barra e chiama JFrame.setDefaultLookAndFeelDecoration(true) prima di creare la GUI
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    107
    provato come hai detto tu con setDefaultLookAndFeelDecorated(true); anzichè setUndecorated(true); ma non cambia nulla, la barra di windows rimane...

    Come potrei fare? Avanti ragazzi aiutatemi plz!!
    Giovanni

  4. #4
    Prova a vedere se così ti va bene:

    this.setUndecorated(true);
    this.getRootPane().setWindowDecorationStyle(JRootP ane.FRAME);

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da diablo85
    provato come hai detto tu con setDefaultLookAndFeelDecorated(true); anzichè setUndecorated(true); ma non cambia nulla, la barra di windows rimane...

    Come potrei fare? Avanti ragazzi aiutatemi plz!!
    setDefaultLookAndFeelDecorated(true) deve essere chiamato prima di creare il JFrame altrimenti non funziona! Chiamalo nel main ad esempio (e' un metodo statico pubblico) invocandolo su JFrame!
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Se vuoi poter spostare la finestra facendone il drag con il mouse da un punto qualsiasi devi provvedere ad alcune considerazioni: appena l'utente clicca, devi memorizzarti il punto di clic, poi quando dragga devi riposizionare la finestra sulla base della distanza del drag dal punto di clic iniziale, quindi ricalcolare il nuovo punto di clic.

    Uno spunto di codice che ho usato in molte mie applicazioni (l'ho usato su pannelli, non su finestre):
    codice:
    /*
     * clicX, clicY, tempX e temtY sono interi
     * dragging è ovviamente un booleano
     * tutte queste variabili sono dichiarate di classe (quindi visibili ovunque nella classe)
     */
    public void mousePressed(MouseEvent me) {
       clicX = me.getX();
       clicY = me.getY();
       tempX = posX;
       tempY = posY;
       dragging = true;
    }
    
    public void mouseDragged(MouseEvent me) {
       if ( dragging ) riposizionaFrame(me.getX() - clicX, me.getY() - clicY);
    }
    
    private void riposizionaFrame(int x, int y) {
       setLocation(tempX + x, tempY + y);
       tempX += x;
       tempY += y;
       posX += x;
       posY += y;
    }
    Il codice l'ho riadattato al volo (nel pannello facevo anche altre cose, come intercettare il tasto destro per dei menu o controllare il ridimensionamento), quindi potrebbero esserci delle sfumature da sistemare.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    107
    Perfetto!! Grazie Mille Lele... come al solito sei il migliore...

    Thread Chiuso!!
    Giovanni

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.