|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Feb 2007
Città: Senigallia(AN)
Messaggi: 2069
|
[Java]Un pò d'ordine nel Jframe
Salve ragazzi
Vorrei ottenere un jframe strutturato come nel modo seguente (scusate l'imprecisione , è stato fatto velocemente): EDIT ![]() I quattro pannelli non sono altro che PanelImage e quelli sotto sono dei pulsanti. Vorrei quindi ottenere: - tutti i bottoni in una riga , non importa a che distanza l'uno dall'altro. - I panelImage divisi in due righe , uno accanto all'altro (anche qui , nessuna importanza su quanto debbano stare lontani). - Tra i quattro panelImage altri due bottoni. Il tutto poi facendo si che il Jframe non possa venire allargato (se non sbaglio , posso fare questo impostando FrameMinimumSize e MaximusSize con lo stesso valore , vero?) Grazie per l'attenzione. Saluti
__________________
Ultima modifica di Dyd87 : 06-09-2010 alle 18:26. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
basta usare il BorderLayout, e al centro puoi mettere un JPanel con GridBagLayou, mentre sotto metti un JPanel con FlowLayout orizzontale oppure una JToolBar
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Aggiungo solo che se vuoi fare in modo che il JFrame non sia ridimensionabile dall'utente è sufficiente invocare: frame.setResizable(false).
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Feb 2007
Città: Senigallia(AN)
Messaggi: 2069
|
Ho provato ad utilizzare un GridLayout in questo modo , giusto per provare:
Codice:
this.setSize(900,700); this.imgPanel = new PanelImage(); this.imgPanel.setPreferredSize(new Dimension(320,320)); //inizializzo il pannello per l'istogramma dell'immagine e setto le dimensioni this.histPanel = new PanelHistogram(); this.histPanel.setPreferredSize(new Dimension(320,320)); //inizializzo il pannello per l'immagine modificata e setto le dimensioni this.imgPanel2 = new PanelImage(); this.imgPanel2.setPreferredSize(new Dimension(320,320)); //inizializzo il pannello per l'istogramma dell'immagine modificata e setto le dimensioni this.histPanel2 = new PanelHistogram(); this.histPanel2.setPreferredSize(new Dimension(320,320)); //prelevo il pannello di contenuto Container pane = this.getContentPane(); this.setResizable(false); //setto il layout del pannello pane.setLayout(new GridLayout(2,3)); pane.add(this.imgPanel); pane.add(this.imgPanel2); pane.add(this.histPanel); pane.add(this.histPanel2); pane.add(this.buttonIsto); pane.add(this.buttonIsto2); Sbaglio indubbiamente qualcosa , ma cosa? Grazie ![]()
__________________
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Sep 2007
Messaggi: 1071
|
Quote:
![]() qui trovi la guida http://download.oracle.com/javase/tu...t/gridbag.html
__________________
Affari: ariakasneverborne, PanCar, Luk@°°°, Fabio310, kintaro oe, krike, fabry180384, dariox am2, chiadoz, windsofchange, dado1979, Rudyduca, aleforumista, Sheva77 |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
- http://www.hwupgrade.it/forum/showthread.php?t=1335610
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Sep 2007
Messaggi: 1071
|
Quote:
![]()
__________________
Affari: ariakasneverborne, PanCar, Luk@°°°, Fabio310, kintaro oe, krike, fabry180384, dariox am2, chiadoz, windsofchange, dado1979, Rudyduca, aleforumista, Sheva77 |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Volevo aggiungere una cosa, a beneficio di Dyd87: prova ad usare MigLayout
![]() Se scrivi la tua GUI a mano può semplificarti molto la vita. L'alternativa è impararsi a menadito i layout manager, sennò ogni volta che devi buttare giù un'interfaccia ti tocca investire sempre un po' di tempo sulla documentazione (se non scrivi codice relativo alle GUI quotidianamente).
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Feb 2007
Città: Senigallia(AN)
Messaggi: 2069
|
Quote:
Magari mi informo meglio con il professore in merito. ![]() Ora cercherò di seguire la guida di Pgi , vediamo se riesco a realizzare qualcosa di buono.
__________________
|
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Feb 2007
Città: Senigallia(AN)
Messaggi: 2069
|
Rieccomi a bomba , con un problema:
![]() Uploaded with ImageShack.us Uploaded with ImageShack.us Come mai gli ImagePanel non occupano tutto lo spazio della cella? Eppure nel codice ho indicato la proprietà Codice:
lim. fill = GridBagConstraints.NONE; Codice:
//inizializzo il pannello per l'immagine e setto le dimensioni this.imgPanel = new PanelImage(); //this.imgPanel.setPreferredSize(new Dimension(320,320)); //inizializzo il pannello per l'istogramma dell'immagine e setto le dimensioni this.histPanel = new PanelHistogram(); //this.histPanel.setPreferredSize(new Dimension(320,320)); //inizializzo il pannello per l'immagine modificata e setto le dimensioni this.imgPanel2 = new PanelImage(); // this.imgPanel2.setPreferredSize(new Dimension(320,320)); //inizializzo il pannello per l'istogramma dell'immagine modificata e setto le dimensioni this.histPanel2 = new PanelHistogram(); // this.histPanel2.setPreferredSize(new Dimension(320,320)); //prelevo il pannello di contenuto Container pane = this.getContentPane(); this.setResizable(false); //setto il layout del pannello GridBagLayout layout = new GridBagLayout(); GridBagConstraints lim = new GridBagConstraints(); pane.setLayout(layout); /* Crea il componente che occupa la cella C0 */ //Component c0 = new JButton("C0"); lim.gridx = 0; //Colonna 0 lim.gridy = 0; //Riga 0 lim.weightx = 1; lim.weighty = 1; lim. fill = GridBagConstraints.NONE; layout.setConstraints(imgPanel, lim); //Associazione pane.add(imgPanel); //Inserimento /* Crea il componente che occupa la cella C1 */ //Component c1 = new JButton("C1"); lim.gridx = 1; //Colonna 1 lim.gridy = 0; //Riga 0 lim.weightx = 1; lim.weighty = 1; lim. fill = GridBagConstraints.NONE; layout.setConstraints(imgPanel2, lim); //Associazione pane.add(imgPanel2); //Inserimento /* Crea il componente che occupa la cella C2 */ //Component c2 = new JButton("C2"); lim.gridx = 0; //Colonna 0 lim.gridy = 1; //Riga 1 lim.weightx = 1; lim.weighty = 1; layout.setConstraints(buttonIsto, lim); //Associazione pane.add(buttonIsto); //Inserimento /* Crea il componente che occupa la cella C3 */ //Component c3 = new JButton("C3"); lim.gridx = 1; //Colonna 0 lim.gridy = 1; //Riga 1 lim.weightx = 1; lim.weighty = 1; layout.setConstraints(buttonIsto2, lim); //Associazione pane.add(buttonIsto2); //Inseriment lim.gridx = 0; //Colonna 1 lim.gridy = 2; //Riga 0 lim.weightx = 1; lim.weighty = 1; lim. fill = GridBagConstraints.NONE; layout.setConstraints(histPanel, lim); //Associazione pane.add(histPanel); //Inserimento lim.gridx = 1; //Colonna 1 lim.gridy = 2; //Riga 0 lim.weightx = 1; lim.weighty = 1; lim. fill = GridBagConstraints.NONE; layout.setConstraints(histPanel2, lim); //Associazione pane.add(histPanel2); //Inserimento
__________________
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Feb 2007
Città: Senigallia(AN)
Messaggi: 2069
|
Avevi ragione.
Ho aggiunto BOTH ai Panel e NONE ai pulsanti , ottenendo però questo: ![]() Eppure ho impostato il PreferredSize dei panel all'inizio (320x200).
__________________
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Feb 2007
Città: Senigallia(AN)
Messaggi: 2069
|
Altro problema: quando clicco su uno degli elementi del menù (File , Istogramma) , la tendina che mi appare risulta essere coperta dalla Grid del Panel.
Come mai?
__________________
|
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Devi avere la griglia dell'interfaccia altrimenti non ne salti più fuori.
Con la griglia prima disponi i componenti, poi ti occupi delle loro dimensioni. Ad esempio il tuo schema potrebbe essere: ![]() Tieni conto che non avendo problemi di dimensioni potresti anche optare per una combinazione di layout "minori". Ad esempio questo: Codice:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package test; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JPanel; public class UITest { public static void main(String[] args) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { start(); } }); } static void start() { JComponent leftTop = new JButton(); leftTop.setPreferredSize(new Dimension(320, 200)); JComponent leftCenter = new JButton(); JComponent leftBottom = new JButton(); leftBottom.setPreferredSize(new Dimension(320, 200)); JPanel left = new JPanel(new BorderLayout(8,8)); left.add(leftTop, BorderLayout.NORTH); left.add(leftCenter, BorderLayout.CENTER); left.add(leftBottom, BorderLayout.SOUTH); JComponent rightTop = new JButton(); rightTop.setPreferredSize(new Dimension(320, 200)); JComponent rightCenter = new JButton(); JComponent rightBottom = new JButton(); rightBottom.setPreferredSize(new Dimension(320, 200)); JPanel right = new JPanel(new BorderLayout(8,8)); right.add(rightTop, BorderLayout.NORTH); right.add(rightCenter, BorderLayout.CENTER); right.add(rightBottom, BorderLayout.SOUTH); JPanel center = new JPanel(new GridLayout(1, 2, 8, 8)); JPanel bottom = new JPanel(new FlowLayout(FlowLayout.CENTER)); for(int i = 0; i < 7; i++) bottom.add(new JButton("Button" + i)); center.add(left); center.add(right); JPanel centerWrapper = new JPanel(new FlowLayout()); centerWrapper.add(center); JFrame frame = new JFrame("test"); frame.add(centerWrapper, BorderLayout.CENTER); frame.add(bottom, BorderLayout.SOUTH); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.pack(); frame.setVisible(true); } } ![]() Affronta in ogni caso la questione per gradi. Prima ti occupi della posizione dei componenti, poi delle dimensioni, poi degli allineamenti, dei bordi eccetera. Se fai tutto in una volta vien fuori un pastrocchio.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Risolvi in fretta dicendo a Swing che vuoi tutti JPopupMenu della tua applicazione in versione "heavyweight": Codice:
... // da qualche parte, prima di inizializzare i menu: JPopupMenu.setDefaultLightWeightPopupEnabled(false); ...
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 30-09-2010 alle 17:22. |
|
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Feb 2007
Città: Senigallia(AN)
Messaggi: 2069
|
![]() ![]() Grazie mille per l'accurata spiegazione. Colpa anche mia che non ho prestato la dovuta attenzione a tutti i contenuti della tua guida. Grazie ancora. Ne dubito fortemente viste le mie capacità , però : "A buon rendere" ![]() Edit: Grazie anche a te Banryu ![]()
__________________
|
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Della serie: il signore è servito ![]()
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#18 | |
Senior Member
Iscritto dal: Feb 2007
Città: Senigallia(AN)
Messaggi: 2069
|
Quote:
![]() Grazie comunque ad entrambi , di nuovo.
__________________
|
|
![]() |
![]() |
![]() |
#19 | |
Senior Member
Iscritto dal: Feb 2007
Città: Senigallia(AN)
Messaggi: 2069
|
Quote:
![]() Ho utilizzato il tuo codice prima dell'inizializzazione del menù , senza successo... Questi i miei componenti (non li utilizzo tutti , molti sono lì dopo vari esperimenti senza successo ed ora non ricordo più quali non mi servano ![]() Codice:
import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.border.TitledBorder; import java.awt.BorderLayout; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.Image; import java.awt.MediaTracker; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.image.BandCombineOp; import java.awt.image.BufferedImage; import java.awt.image.Raster; import java.awt.image.WritableRaster; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.border.TitledBorder;
__________________
|
|
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Feb 2007
Città: Senigallia(AN)
Messaggi: 2069
|
Salve ragazzi
Ho ripreso da poco in mano il codice e ancora non riesco a risolvere il problema riportato sopra , quello della menubar che scompare sotto il Panel se aperta. Grazie mille per l'aiuto eventuale ![]()
__________________
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:41.