Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339

    Posizionamento di una frame

    Ciao a tutti.

    Ho dei problemi a stabilire la posizione in cui una frame deve "comparire".

    Si , c'è il metodo setLocation() che riceve due cordinate e posiziona la frame....

    Ma io voglio posizionare la frame a partire da un vertice di riferimento.

    Per esempio dal vertice superiore sinistro di una frame che è già visualizzata al centro dello schermo per esempio.

    Come posso fare?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    1 Prendi le coordinate del vertice di riferimento che ti interessa
    2 Aggiungi (in senso algebrico) alla coordinata X e alla coordinata Y lo "scostamento" che ti interessa.

    Poi, se ti può interessare, c'è il metodo setLocationRelativeTo(Component c) che "centra" automaticamente la finestra relativamente al componente passato (passando "null", la finestra viene centrata sullo schermo).


    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

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    OK
    TANKS
    CIAO

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Ti pongo quest'altro quesito.

    Ok c'è setLocation() , e posso decidere la posizione passandogli le coordinate.

    Quello che mi interessa di più è questo :

    mettiamo che io visualizzo una frame.... dopodichè io sposto con il mouse la frame visualizzata.

    Bene io voglio che in questa frame sia visualizzata comunque un'altra frame al centro di essa anche se la sposto prima con il mouse.

    codice:
    class FrameNotificaAggiungi extends JFrame{
    			
    			private JLabel domanda = new JLabel("AGGIUNGERE L'ARTICOLO?");
    			private JButton si = new JButton("Si");
    			private JButton no = new JButton("No");
    			
    			public FrameNotificaAggiungi(){
    				super();
    				this.setTitle("Aggiungi Articolo?");
    				this.InizializzaFNA();
    				this.setLocationRelativeTo(FrameAggiungi.getX()+50, FrameAggiungi.getY()+50);  
    
    //LA RIGA DI CODICE SOPRA E' SBAGLIATA , MA TE L'HO POSTATA PER FARTI CAPIRE MEGLIO COSA HO IN MENTE
    				this.pack();
    				this.setVisible(true);
    			}
    In pratica voglio che la frame "FrameNotificaAggiungi" sia posizionata a partire dal vertice di FrameAggiungi con uno scostamento di 50pixel x 50pixel. Questo deve succedere anche se io sposto con il mouse la frame "FrameAggiungi".

    Spero di essere stato il piu chiaro possibile in merito al mio problema.

    Mi puoi aiutare?

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Markus85
    this.setLocationRelativeTo(FrameAggiungi.getX()+50 , FrameAggiungi.getY()+50);
    Tra l'altro è setLocation ... non setLocationRelativeTo (che fa una cosa un pochino

    Originariamente inviato da Markus85
    In pratica voglio che la frame "FrameNotificaAggiungi" sia posizionata a partire dal vertice di FrameAggiungi con uno scostamento di 50pixel x 50pixel. Questo deve succedere anche se io sposto con il mouse la frame "FrameAggiungi".
    Quindi anche dopo che FrameNotificaAggiungi è stata visualizzato?

    Allora devi registrare un listener su FrameAggiungi, il ComponentListener. E in componentMoved(ComponentEvent e) ricevi notifica che il frame si è mosso .... e cambi di conseguenza la posizione di FrameNotificaAggiungi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Ok.
    Credevo fosse piu' facile da fare...
    Cmq proverò in questo modo.

    Grazie per l'aiuto.

    Ciao

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Markus85
    Credevo fosse piu' facile da fare...
    Non è così difficile come pensi. Guarda questo esempio:

    codice:
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class AncoraggioFrame {
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    initGui();
                }
            });
        }
    
        private static void initGui() {
            final JFrame f1 = new JFrame("Frame 1");
            f1.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            f1.setSize(300, 200);
            f1.setVisible(true);
    
            final JFrame f2 = new JFrame("Frame 2");
            f2.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            f2.setSize(300, 200);
            f2.setVisible(true);
    
            f1.addComponentListener(new ComponentAdapter() {
                public void componentMoved(ComponentEvent e) {
                    Rectangle r = f1.getBounds();
    
                    f2.setLocation(r.x + r.width, r.y);    // Frame 2 ancorato alla destra di Frame 1
                }
            });
        }
    }
    Provalo e muovi Frame 1 ..... Frame 2 resta "ancorato" alla destra di Frame 1.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Ho provato seguendo il tuo esempio...

    Mi sa che non ho scritto bene il codice però.

    Allora io ho una frame di nome "FrameAggiungi" ; se premo un bottone di questa frame compare un altra frame di notifica , la frame "Attenzione" per esempio.

    Questa frame di notifica deve essere posizionata adeguatemente.

    Ti ho scritto dove non va sul codice

    codice:
    	class FrameAggiungi extends JFrame{
    		
    		private JLabel tipo = new JLabel("Tipo : ");
    		private JLabel marca = new JLabel("Marca : ");
    		private JLabel modello = new JLabel("Modello : ");
    		private JLabel codiceID = new JLabel("Codice Identificativo : ");
    		private JLabel quantità = new JLabel("Quantità : ");
    		private JLabel prezzoUnitario = new JLabel("Prezzo Unitario (Euro) : ");
    		private JLabel caratteristiche = new JLabel("Caratteristiche : ");
    		private JLabel settoreUb = new JLabel("Settore di Ubicazione : ");
    		private JTextField infoTipo = new JTextField();
    		private JTextField infoMarca = new JTextField();
    		private JTextField infoModello = new JTextField();
    		private JTextField infoCodice = new JTextField();
    		private JTextField infoQuantità = new JTextField();
    		private JTextField infoPrezzo = new JTextField();
    		private JTextField infoSettore = new JTextField();
    		private TextArea infoCaratteristiche = new TextArea();
    		private JButton aggiungi = new JButton("Aggiungi Articolo");
    		
    		public FrameAggiungi(){
    			super();
    			this.setTitle("Aggiungi Articolo");
    			this.setLocationRelativeTo(Cerca);
    			this.InizializzaFA();	
                                              this.addComponentListener(new ComponentAdapter(){ 
                                              public void componentMoved(ComponentEvent e)
    Rectangle r = FrameAggiungi.getBounds() //NON RICONOSCEla frame FrameAggiungi
    Attenzione.setLocation(r.x + r.width, r.y)}  //NON RICONOSCE NEMMENO LA FRAME Attenzione
    });
    			this.pack();
    			this.setVisible(true);
    		}
    ti posto anche il codice della frame attenzione

    codice:
    class Attenzione extends JFrame{
    			
    			private JLabel richiamo = new JLabel("CAMPI INCOMPLETI!");
    			private JButton ricevuto = new JButton("Ok");
    			
    			public Attenzione(){
    				super();
    				this.setTitle("ATTENZIONE!");
    				this.InizializzaAtt();
    				this.setSize(300,150);
    				this.setVisible(true);
    			}
    			
    			private void InizializzaAtt(){
    				JPanel p = new JPanel();
    				GridBagLayout g = new GridBagLayout();
    				p.setLayout(g);
    				p.add(richiamo, new GBC(0,1).setWeight(50,50));
    				p.add(ricevuto, new GBC(0,2).setIpad(50,0).setWeight(50,50));
    				ActionListener ascRic = new ascoltatoreAtt(this);
    				ricevuto.addActionListener(ascRic);
    				this.getContentPane().add(p);
    			}
    }
    Mi Aiuti?
    Ciao

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Markus85
    codice:
    Rectangle r = FrameAggiungi.getBounds() //NON RICONOSCEla frame FrameAggiungi
    In questo punto sei in una "anonymous inner class" e il this fa riferimento alla istanza della inner class (non alla istanza di FrameAggiungi).

    Tecnicamente si potrebbe "qualificare" il this così

    FrameAggiungi.this.getBounds()

    ma in realtà non serve ... perché getBounds di FrameAggiungi è "in scope" in quel punto, quindi semplicemente

    getBounds()

    Originariamente inviato da Markus85
    codice:
    Attenzione.setLocation(r.x + r.width, r.y)}  //NON RICONOSCE NEMMENO LA FRAME Attenzione
    Qui no. Devi avere un riferimento alla istanza di Attenzione .... ce l'hai o puoi averlo in quel punto?
    Da qualche parte in FrameAggiungi andrai ad istanziare Attenzione ... no? E allora devi tenerti il riferimento (es. in variabile di istanza). Ma occhio! Che il ComponentListener lo registri nel costruttore di FrameAggiungi quindi "funziona" sempre, anche quando non c'è ancora una finestra di Attenzione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    e se invece di scrivere queste istruzioni nel costruttore di FrameAggiungi li scrivessi invece nel metodo actionPerformed dell'ascoltatore del bottone della frame suddetta.
    Potrebbe andare bene?

    codice:
    class ascoltatoreFrameAggiungi implements ActionListener{
    			
    			private FrameAggiungi BFAggiungi;
    			
    			public ascoltatoreFrameAggiungi(FrameAggiungi BFAggiungi){
    				this.BFAggiungi = BFAggiungi;
    			}
    			
    			public void actionPerformed(ActionEvent e){
    				
    				
    				
    				if(infoTipo.getText().equals("")==true || infoMarca.getText().equals("")==true || infoModello.getText().equals("")==true || infoCodice.getText().equals("")==true || infoQuantità.getText().equals("")==true || infoPrezzo.getText().equals("")==true || infoSettore.getText().equals("")==true)
    
    
    					new Attenzione();   //LI POSSO SCRIVERE QUI LE ISTRUZIONI PER IL POSIZIONAMENTO?
    
    
    
    
    
    				else if(infoTipo.getText().equals("")==false && infoMarca.getText().equals("")==false && infoModello.getText().equals("")==false && infoCodice.getText().equals("")==false && infoQuantità.getText().equals("")==false && infoPrezzo.getText().equals("")==false && infoSettore.getText().equals("")==false)
    					if(Verifica(infoQuantità.getText())==false && Verifica2(infoPrezzo.getText())==false)
    						new Attenzione2();
    					else if(Verifica(infoQuantità.getText())==true && Verifica2(infoPrezzo.getText())==false)
    						new Attenzione3();
    					else if(Verifica(infoQuantità.getText())==false && Verifica2(infoPrezzo.getText())==true)
    						new Attenzione4();
    					else
    						new FrameNotificaAggiungi();
    				}
    			
    			}//ASCOLTATORE FRAME AGGIUNGI
    Che dici?

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.