Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543

    Consiglio su layoutManager da usare

    Ciao raggazzi, voglio realizzare questo:


    Il rettangolo grande è inserito in un JPanel con gridLayout(1x1) per far sì che occupi tutto lo spazio necessario. Quello che avevo pensato di fare era

    PannelloGrande --> BorderLayout con
    - BorderLayout.NORTH la freccetta alta
    - BorderLayout.CENTER JScrollPane(rettangoli)
    - BorderLayout.SOUTH la freccetta bassa


    rettangoli --> Quì non avrei idea. Un gridBagLayout che per ogni rettangolo verde crei una nuova riga? Il grid è da escludere perchè i componenti hanno dimensioni diverse...

    i rettangoli verdi--> BorderLayout con
    - BorderLayout.CENTER un JPanel Gridbag(1,1) con dentro una textarea per il testo
    - BorderLayout.SOUTH la JLabel per "altro testo"

    voi che dite?

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Io li posizionerei manualmente i componenti interni..

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    gridbaglayout, ci metti un po' ad impararlo, ma ti dà soddisfazioni (a livello anche di resizing). altri non ne conosco (forse andbin sa dirti).
    Per quanto riguarda i posizionamenti, raggruppa componenti logici/simili in pannelli e componi l'intero frame mettendo insieme i pannelli (non so se mi hai capita)

  4. #4
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    il gridbag ho letto ovunque che è molto difficile ma non vedo altre soluzioni... detto ciò ho provato a fare come ho scritto e per quanto riguarda le frecce e il posizionamento dello scrollpane non ho alcun problema....
    il problema sorge quando vado ad aggiungere allo scrollPane i vari rettangoli verdi. Se ne aggiungo solo uno mi occupa l'intera area a disposizione, se ne aggiungo più di uno, i vari rettangoli si dividono lo spazio verticale....mi sto per suidare

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  5. #5
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    Dato che non so come procedere vi ripulisco il codice di una parte della GUI dalle informazioni non necessarie e vediamo se riuscite a darmi una mano.
    Vi dico in due parole che per imparare meglio il linaguaggio (soprattutto come fare le GUI) mi sto realizzando una cosa che mi serve: un semplice planning da scrivania.
    Sono 4 stupide classi ma non riesco a capire cosa sbaglio...inoltre inserisco sotto ogni classe qual è la preferredSize che java calcola aggiungendo se è ok o meno

    codice:
    -------------------------------------------
    WEEK
    
    java.awt.Dimension[width=1182,height=370]
    
    Tutto ok
    -------------------------------------------
    public class Week extends JPanel{
    
    	public Week(int nWeek) {
    		this.setLayout(new GridLayout(1, 6));
    
    		Day[] day = new Day[7];
    
    		
    		for(int i=0; i<months.length; i++){
    			day[i] = new Day(daysWeek[i], daysMonth[i], months[i], years[i]); //è un JPanel
    		}
    		
    		JPanel prima = new JPanel();
    		prima.setLayout(new GridLayout(1,1));
    		prima.add(day[0]);
    
    		JPanel seconda = new JPanel();
    		seconda.setLayout(new GridLayout(1,1));
    		seconda.add(day[1]);
    
    		[lo stesso per terza, quarta e quinta colonna]
    		
    		JPanel weekdays = new JPanel();
    		weekdays.setLayout(new GridLayout(2, 1));
    		weekdays.add(day[5]);
    		weekdays.add(day[6]);
    		
    		JPanel sesta = new JPanel();
    		sesta.setLayout(new GridLayout(1,1));
    		sesta.add(weekdays);
    
    		this.add(prima);
    		this.add(seconda);
    		this.add(terza);
    		this.add(quarta);
    		this.add(quinta);
    		this.add(sesta);
    	}
    
    }
    
    -------------------------------------------
    DAY
    
    java.awt.Dimension[width=197,height=185]
    
    Tutto ok
    -------------------------------------------
    public class Day extends JPanel{
    	
    	public Day(String day, int dayNumber, String month, int year){
    		
    		JLabel giorno = new JLabel(day);
    		giorno.setFont(new Font("Kalinga", Font.PLAIN, 20));
    		giorno.setLocation(5, 5);
    		giorno.setSize(197, 20);
    		
    		JLabel numero = new JLabel(Integer.toString(dayNumber));
    		numero.setFont(new Font("Kalinga", Font.PLAIN, 40));
    		int posN = 150;
    		if(dayNumber<10) posN=170;
    		numero.setLocation(posN, 5);
    		numero.setSize(197, 40);
    		
    		JLabel mese = new JLabel(month+" "+Integer.toString(year));
    		mese.setFont(new Font("Kalinga", Font.PLAIN, 15));
    		mese.setLocation(5, 25);
    		mese.setSize(197, 15);
    
    		this.setLayout(new BorderLayout());
    		
    		JPanel top = new JPanel();
    		FlowLayout f = new FlowLayout();
    		f.setVgap(0);
    		f.setHgap(0);
    		top.setLayout(f);
    		
    		Head h = new Head(); //inutile ai fine del mio problema...è un JPanel con layout null
    		h.add(giorno);
    		h.add(mese);
    		h.add(numero);
    
    		top.add(h);
    
    		
    		JPanel content = new JPanel(new GridLayout(1,1));
    		content.add(new EventPanel(day, dayNumber, month, year));
    
    		this.add(top, BorderLayout.NORTH);
    		this.add(content, BorderLayout.CENTER);
    	}
    }
    
    ------------------------------------------------------------------------
    EVENTPANEL
    
    EventPaneljava.awt.Dimension[width=128,height=135]
    
    La larghezza dovrebbe essere sempre 197 e non capisco perchè sia 128!
    La cosa più strana (per me) è che inserendo uno sfondo mi occupa tutto
    lo spazio, quindi i 197, ma mi segna 128 ma i componenti al suo interno
    occupano 128
    ------------------------------------------------------------------------
    public class EventPanel extends JPanel{
    	
    	public EventPanel(String day, int dayNumber, String month, int year){
    		
    		this.setLayout(new BorderLayout());
    		
    		JPanel components = new JPanel();
    		components.setLayout(new GridBagLayout());
    
    		GridBagConstraints GBC = new GridBagConstraints();
    		GBC.gridx = 0;
    		GBC.gridy = 0;
    		GBC.insets = new Insets(5,0,0,0);
    
    		JPanel prova = new JPanel(new GridLayout(1,1));
    		prova.setBackground(Color.RED);
    		SingleEvent s = new SingleEvent("fffffffffffffffff");
    		prova.add(s);
    
    		JPanel prova2= new JPanel(new GridLayout(1,1));
    		prova2.setBackground(Color.RED);
    		SingleEvent s2 = new SingleEvent("fffffffffffffffff su altra riga???");
    		prova2.add(s2);
    		
    		components.add(prova, GBC);
    		GBC.gridy++;
    		components.add(prova2, GBC);
    		GBC.gridy++;
    
    		JPanel top = new JPanel(new GridLayout(1,1));
    		top.add(new UpArrow());//è un Jbutton
    		this.add(top, BorderLayout.NORTH);
    		
    		this.add(components, BorderLayout.CENTER);
    
    		JPanel bottom = new JPanel(new GridLayout(1,1));
    		bottom.add(new DownArrow());//altro JButton
    		bottom.setOpaque(false);
    		this.add(bottom, BorderLayout.SOUTH);
    
    	}
    }
    ------------------------------------------------------------------------
    SINGLEEVENT
    
    SingleEvent: java.awt.Dimension[width=126,height=52]
    
    La larghezza, in relazione a EVENTPANEL è corretta anche se dovrebbe
    essere 197. Come altezza non ci siamo perchè nella seconda istanza,
    la textarea occupa una riga in più e quindi il Jpanel dovrebbe essere
    più alto, o no? la visualizzazione dell'altezza resta corretta
    ------------------------------------------------------------------------
    
    
    public class SingleEvent extends JPanel{
    	
    	public SingleEvent(String s){
    
    		JPanel container = new JPanel(new BorderLayout());
    		
    		JPanel bottom = new JPanel();
    		bottom.add(new JLabel("Piccolo testo testo"));
    
    		JPanel center = new JPanel(new GridLayout(1,1));
    		
    		JTextArea textArea = new JTextArea(s);
    		center.add(textArea);
    		textArea.setWrapStyleWord(true);
    		textArea.setEditable(false);
    		textArea.setLineWrap(true);
    		
    		container.add(center, BorderLayout.CENTER);
    		container.add(bottom, BorderLayout.SOUTH);
    
    		this.add(container);
    	}
    }
    Un tazzone di doppia caffè con doppia panna e doppio cornetto a chi mi aiuta...sto impazzendo

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Perdona se non ho letto il codice ma i miei occhi a quest'ora non ce la fanno..

    Comunque, lo scrollPane in che pannello viene inserito? (o meglio, quale layout ha il pannello)

    Se metti un BorderLayout ti va ad occupare tutta l'area a disposizione. Potresti provare con un FlowLayout (di default per JPanel)..

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    dall'immagine che hai postato io propenderei per semplificare un po': forse ti basta anche un BoxLayout con i componenti in verticale, o meglio 2... uno per lato
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  8. #8
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    ciao ragazzi, ho provato tutte le vostre soluzioni ma non ho risolto...quindi ho preso una decisione drastica...ho abbattuto tutto il mio codice (solo queste classi) e l'ho riscritto da capo. Ora funziona tranne che per un piccolo problemino con lo scroll del JScrollPane che, quando viene mostrata l'interfaccia, lo scroll non parte dal top ma quasi dal bottom...ora ci sbatto un po' la testa e vedo come posso risolvere. In ogni caso grazie a tutti per il tempo che mi avete dedicato

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

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.