Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    [Java] Posizionamento oggetti all'interno di una finestra

    Teniamo conto che ho una finestra creata con l'oggetto JFrame e all'interno ci voglio piazzare delle JLabel e delle JTextField. Per incollarle all'interno uso il .add().

    Ora cosi facendo me le piazza uno di seguito all'altra andando a capo solo alla fine della finestra.
    C'è un modo per piazzarle a mio piacimento magari dandogli delle coordinate o qualcosa di simile?

    Se si potete farmi qualche esempio tramite magari un programmino funzionante? che come al solito ho dato uno sguardo alle API ma ci ho solo perso la testa per un ora e mezza senza concludere nulla

  2. #2
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Devi studiarti i layout manager; puoi partire da qui:

    http://java.sun.com/docs/books/tutor...out/index.html

    seguiti i vari link per iniziare a capirli

    farti degli esempi ora è inutile percke l'argometno è molto esteso e anche non semplice, ogni layout si distingue per come dispone i componenti e per come tratta le dimensioni dei componenti inseriti; magari intanto puoi farci capire come vuoi che i tuoi componenti siano inseiti nella finestra e possiamo suggerirti come comporre iltutto; in genere l'effetto voluto si ottiene componendo piu pannelli uno dentro l'altro con diversi layout; ti consiglio di non impostare a null il layout per poter usare le coordinate nella disposizione deicomponenti: anche se all'inizio sono un po difficili coi layout riesci a fare tutto cio che ti serve in maniera piu elegante e meglio organizzata.

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  3. #3
    Originariamente inviato da anx721
    Devi studiarti i layout manager; puoi partire da qui:

    http://java.sun.com/docs/books/tutor...out/index.html

    seguiti i vari link per iniziare a capirli

    farti degli esempi ora è inutile percke l'argometno è molto esteso e anche non semplice, ogni layout si distingue per come dispone i componenti e per come tratta le dimensioni dei componenti inseriti; magari intanto puoi farci capire come vuoi che i tuoi componenti siano inseiti nella finestra e possiamo suggerirti come comporre iltutto; in genere l'effetto voluto si ottiene componendo piu pannelli uno dentro l'altro con diversi layout; ti consiglio di non impostare a null il layout per poter usare le coordinate nella disposizione deicomponenti: anche se all'inizio sono un po difficili coi layout riesci a fare tutto cio che ti serve in maniera piu elegante e meglio organizzata.

    Ho dato uno sguardo alla guida che mi hai dato ma sto impazzendo un pò, vorrei utilizzare uno SpringLayout per creare qualcosa del tipo:

    c.add(intarea);
    c.add(primoTag) - c.add(primoText);
    c.add(secondoTag) - c.add(secondoText);
    c.add(sommaTag) - c.add(sommaText);
    c.add(run);

    Dove il primo tag è una scritta di intestazione, dove le variabili che finiscono con Tag sono oggetti JLabel mentre quelli che finiscono con Text sono dei JTextField.

    Il codice che uso è il seguente:
    codice:
    //Includo le librerie per l'interfaccie grafiche
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    //Creo la classe con gli oggetti frafici
    public class grafica implements ActionListener {
    	
    	//Variabili per settare il Layout
    	private static final int WINDOW_WIDTH = 500; //pixel
    	private static final int WINDOW_HEIGHT = 500; //pixel
    	private static final int FIELD_WIDTH = 20; // caratteri
    	private static final int AREA_WIDTH = 40; // caratteri
    	
    	//private static final FlowLayout LAYOUT_STYLE =
    	//	new FlowLayout();
    		
    	private static final SpringLayout LAYOUT_STYLE = new SpringLayout();
    		
    	private static final String INTESTAZIONE = "Inserisci i due numeri da sommare:";
    	
    	//finestra per l'interfaccia grafica
    	private JFrame window = new JFrame("grafica.class");
    	
    	//Stampo l'intestazione
    	private JTextArea intarea = new JTextArea(INTESTAZIONE, 2, 
    		AREA_WIDTH);
    		
    	//Campo per l'inserimento del primo num
    	private JLabel primoTag = new JLabel("  Primo numero");
    	private JTextField primoText = new JTextField(FIELD_WIDTH);
    	
    	//Campo per l'inserimento del secondo numero
    	private JLabel secondoTag = new JLabel("  Secondo numero");
    	private JTextField secondoText = new JTextField(FIELD_WIDTH);
    	 
    	//Campo per il risultato
    	private JLabel sommaTag = new JLabel("  Risultato");
    	private JTextField sommaText = new JTextField(FIELD_WIDTH);
    	
    	//pulsante di esecuzione
    	private JButton run = new JButton("Somma");
    	
    	public grafica(){
    		//configura GUI
    		window.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
    		window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		
    		intarea.setEditable(false);
    		intarea.setLineWrap(true);
    		intarea.setWrapStyleWord(true);
    		intarea.setBackground(window.getBackground());
    		
    		sommaText.setEditable(false);
    		sommaText.setBackground(Color.WHITE);
    		
    		//Registra il rilevatore di eventi
    		run.addActionListener(this);
    		
    		//aggiunge i componenti alla finestra
    		Container c = window.getContentPane();
                         
    		c.setLayout(LAYOUT_STYLE);	
    		
    		c.add(intarea);
    		c.add(primoTag);
    		c.add(primoText);
    		c.add(secondoTag);
    		c.add(secondoText);
    		c.add(sommaTag);
    		c.add(sommaText);
    		c.add(run);
                                 
    		
    		//visualizza GUI
    		window.show();
    		}
    	//Gestore degli eventi
    	public void actionPerformed(ActionEvent e){
    		
    		//recupera le risposte dell'utente
    	  	String response1 = primoText.getText();
    	  	double p = Double.parseDouble(response1);
    	  	String response2 = secondoText.getText();
    	  	double s = Double.parseDouble(response2);
    	  	
    	  	//visualizza somma
    	  	double Doutput = p + s;
    	  	String output = String.valueOf(Doutput);
    	  	sommaText.setText(output);
    		}
    		
    	//main, punto d'ingresso dell'applicazione
    	  public static void main(String[] args) {
    	  	grafica gui = new grafica();
    	  }
    }
    Da notare che ho già settato il tipo di layout come SpringLayout nella costante "LAYOUT_STYLE". Il fatto è che non ho capito bene come funziona il posizionamento tramite west ecc ecc.. se potessi farmi qualche esempio.

  4. #4
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Lo SpringLayout è l'unico che non ho mai usato...se mi fai uno skizzo grafico di come devono essere disposti i componenti, specificando di che componenti si tratta, ti do il codice

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  5. #5
    Originariamente inviato da anx721
    Lo SpringLayout è l'unico che non ho mai usato...se mi fai uno skizzo grafico di come devono essere disposti i componenti, specificando di che componenti si tratta, ti do il codice
    Alluora te lo scrivevo già prima comunque te lo ridico con più precisione:

    Ho un intarea di tipo JTextArea che sarebbe l'intestazione, con dentro scritto "Inserire i due numeri da sommare" e va sopra sopra la finestra (allignamento a sinistra);


    Subito sotto c'è primoTag di tipo JLabel con subito accanto primoText di tipo JTextField;

    Sotto ancora a seguire c'è secondoTag di tipo Jlabel con accanto primoText di tipo JTextField;

    Alla fin fine della pagina ci deve essere sommaTag di tipo JLabel con accanto il pulsante di tipo JButton con dentro scritto "somma".

    Le grandezze sonno fisse e te le riporto qui di seguito:

    FIELD_WIDTH = 20;
    AREA_WIDTH = 40;

    Per le grandezze della finestra invece fai un pò tu l'importante e che ci entrano tutti gli elementi.
    Un altra cosa se puoi allinea tutti gli elementi sulla sinistra.

    A proposito grazie mille a tutti i programmatori Java che nel corso di queste giornate mi stanno supportando nello studio del linguaggio

    L'idea grafica comunque dovrebbe essere simile a quella presente sul sito che mi hai linkato:


    Le uniche differenze sono ovviamente le varie intestazioni e che all'inizio c'è un intestazione generale che dice che cavolo fa il programma (scusami ma non ho attualmente programmi di grafica installati)

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    ciao. allora scusate l'intromissione. Potresti usare 2 diversi layout manager.

    Crei un JPanel contenitore e gli imposti come layout un grid, con una colonna e due righe.

    Nella prima riga inserisci la tua JLabel descrittiva. Nella seconda riga un altro JPanel, con layout tipo spring, in cui hai già inserito tutti i tuoi componenti.

    Saluti.

    PS: se hai anche un eventuale footer, potresti voler considerare un borderlayout, ma non voglio mettere troppa carne al fuoco per il momento.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Originariamente inviato da Andrea1979
    ciao. allora scusate l'intromissione. Potresti usare 2 diversi layout manager.

    Crei un JPanel contenitore e gli imposti come layout un grid, con una colonna e due righe.

    Nella prima riga inserisci la tua JLabel descrittiva. Nella seconda riga un altro JPanel, con layout tipo spring, in cui hai già inserito tutti i tuoi componenti.

    Saluti.

    PS: se hai anche un eventuale footer, potresti voler considerare un borderlayout, ma non voglio mettere troppa carne al fuoco per il momento.

    E' un forum e ogni parere verrà preso in considerazione

    In ogni caso però se puoi sarebbe meglio che accompagni tutto con un pò di codice che funzioni perchè detto a parole sembra tutto bello e facile ma poi..

  8. #8
    Ok il GridLayout è risultato molto semplice e sono riuscito ad utilizzarlo abbastanza facilmente.

    Giusto una cosa, esiste un comando per settare che una finestra JFrame non può essere ridimensionata? se si quale?

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    codice:
    JFrame window = new JFrame();
    window.isResizable(false);
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  10. #10
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Ecco un esempio di come puoi ottenere l'effetto che vuoi usando il GridBagLayout; ho usato una label al posto dell'area di testo.

    codice:
    class MyPanel extends JPanel{
    	JButton pulsante = new JButton("somma");
    	JTextField field1 = new JTextField(20);
    	JTextField field2 = new JTextField(20);
    	
    	public MyPanel(){
    		setLayout(new GridBagLayout());
    		//setLayout(new GridBorderLayout());
    		GridBagConstraints c = new GridBagConstraints();
    		c.insets = new Insets(5, 5, 5, 5);
    		c.ipadx = 2;
    		c.ipady = 2;
    		
    		c.anchor = GridBagConstraints.LINE_START;
    		c.gridwidth = 3;
    	//	JTextArea area = new JTextArea(1, 40);
    	//	area.setText(" Inserire i due numeri da sommare:");
    	//	area.setEditable(false);
    	//	add(area, c);
    		add(new JLabel("Inserire i due numeri da sommare"), c);
    		
    		c.anchor = GridBagConstraints.LINE_START;
    		c.gridwidth = 1;
    		c.gridy = 1;
    		add(new JLabel("primoTag"), c);
    
    		c.anchor = GridBagConstraints.LINE_END;
    		c.gridwidth = 2;
    		c.gridx = 1;
    		add(field1, c);
    		
    		c.anchor = GridBagConstraints.LINE_START;
    		c.gridx = 0;
    		c.gridwidth = 1;
    		c.gridy = 2;
    		add(new JLabel("secondoTag"), c);
    
    		c.anchor = GridBagConstraints.LINE_END;
    		c.gridwidth = 2;
    		c.gridx = 1;
    		add(field2, c);
    		
    		c.gridy = 3;
    		c.gridx = 0;
    		c.anchor = GridBagConstraints.LINE_START;
    		c.gridwidth = 1;
    		add(new JLabel("sommaTag"), c);
    		
    		
    		c.gridx = 2;
    		//c.anchor = GridBagConstraints.LINE_END;
    		add(pulsante, c);
    		validate();
        }
    }
    per impedire il ridimensionamento c'è un metodo apposito, leggiti le api del JFrame.

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

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.