View Full Version : [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
http://www.pctunerup.com/up/results/_201009/th_20100906192535_schema.jpg (http://www.pctunerup.com/up/image.php?src=_201009/20100906192535_schema.jpg)
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
basta usare il BorderLayout, e al centro puoi mettere un JPanel con GridBagLayou, mentre sotto metti un JPanel con FlowLayout orizzontale oppure una JToolBar
banryu79
06-09-2010, 20:18
Aggiungo solo che se vuoi fare in modo che il JFrame non sia ridimensionabile dall'utente è sufficiente invocare: frame.setResizable(false).
Ho provato ad utilizzare un GridLayout in questo modo , giusto per provare:
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);
Il risultato ottenuto è questo:
http://www.pctunerup.com/up/results/_201009/th_20100907104358_weq.JPG (http://www.pctunerup.com/up/image.php?src=_201009/20100907104358_weq.JPG)
Sbaglio indubbiamente qualcosa , ma cosa?
Grazie ;)
Ho provato ad utilizzare un GridLayout in questo modo , giusto per provare:
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);
Il risultato ottenuto è questo:
http://www.pctunerup.com/up/results/_201009/th_20100907104358_weq.JPG (http://www.pctunerup.com/up/image.php?src=_201009/20100907104358_weq.JPG)
Sbaglio indubbiamente qualcosa , ma cosa?
Grazie ;)
beh stai usando un GridLayout non un GridBagLayout ;)
qui trovi la guida http://download.oracle.com/javase/tutorial/uiswing/layout/gridbag.html
banryu79
07-09-2010, 11:33
beh stai usando un GridLayout non un GridBagLayout ;)
qui trovi la guida http://download.oracle.com/javase/tutorial/uiswing/layout/gridbag.html
E qui c'è un tutorial di PGI, se lo volessi in italiano:
- http://www.hwupgrade.it/forum/showthread.php?t=1335610
E qui c'è un tutorial di PGI, se lo volessi in italiano:
- http://www.hwupgrade.it/forum/showthread.php?t=1335610
sempre grande pgi, è più completo il suo che quello ufficiale di tutorial :D
banryu79
07-09-2010, 17:10
Volevo aggiungere una cosa, a beneficio di Dyd87: prova ad usare MigLayout (http://www.miglayout.com/) ;)
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).
Volevo aggiungere una cosa, a beneficio di Dyd87: prova ad usare MigLayout (http://www.miglayout.com/) ;)
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).
Grazie per il consiglio Banryu ma purtroppo non credo di poter utilizzare quel componente , visto che di progetto d'esame si tratta.
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.
Rieccomi a bomba , con un problema:
http://img543.imageshack.us/img543/5771/javav.th.jpg (http://img543.imageshack.us/i/javav.jpg/)
Uploaded with ImageShack.us (http://imageshack.us)
Uploaded with ImageShack.us (http://imageshack.us)
Come mai gli ImagePanel non occupano tutto lo spazio della cella?
Eppure nel codice ho indicato la proprietà
lim. fill = GridBagConstraints.NONE;
Ecco tutto il 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
Grazie a tutti
Come mai gli ImagePanel non occupano tutto lo spazio della cella?
Eppure nel codice ho indicato la proprietà
lim. fill = GridBagConstraints.NONE;
Non ci giurerei, ma credo sia proprio per quello.. credo dovresti mettere BOTH e non NONE
Avevi ragione.
Ho aggiunto BOTH ai Panel e NONE ai pulsanti , ottenendo però questo:
http://img692.imageshack.us/img692/4123/java2.th.jpg (http://img692.imageshack.us/i/java2.jpg/)
Eppure ho impostato il PreferredSize dei panel all'inizio (320x200).
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?
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:
http://img153.imageshack.us/img153/9492/schemak.png
Tieni conto che non avendo problemi di dimensioni potresti anche optare per una combinazione di layout "minori".
Ad esempio questo:
/*
* 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);
}
}
Genera questo:
http://img84.imageshack.us/img84/9075/schermatatest.png
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.
banryu79
30-09-2010, 17:18
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?
Perchè stai mescolando componenti "lightweigth" tipici di Swing (il JPopupMenu che compare quando clicchi su un menu) con componenti "heavywheight" tipici di AWT (il tuo ImagePanel cosa estende? Sospetto java.awt.Panel).
Risolvi in fretta dicendo a Swing che vuoi tutti JPopupMenu della tua applicazione in versione "heavyweight":
...
// da qualche parte, prima di inizializzare i menu:
JPopupMenu.setDefaultLightWeightPopupEnabled(false);
...
Ancora meglio: se non sei vicolato da qualche prerequisito ad usare i componenti AWT mollali e usa i corrispettivi componenti Swing (ad esempio java.awt.Panel -> javax.swing.JPanel). Occhio però che il modello di rendering cambia leggermente (non ho letto il tuo codice, quindi non so se fai del rendering custom in qualche componente).
http://www.parafiaswaleksego.plock.opoka.org.pl/santo%20subito.jpg
:D
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 :)
banryu79
30-09-2010, 17:24
Grazie mille per l'accurata spiegazione.
Colpa anche mia che non ho prestato la dovuta attenzione a tutti i contenuti della tua guida.
Prima ti sei ritrovato con la guida tra le mani, ora ti è sbucato fuori l'autore della stessa in diretta.
Della serie: il signore è servito :D
Prima ti sei ritrovato con la guida tra le mani, ora ti è sbucato fuori l'autore della stessa in diretta.
Della serie: il signore è servito :D
Bisogna ammettere che è saltato fuori anche perchè l'ho importunato via PM , ahah :D
Grazie comunque ad entrambi , di nuovo.
Perchè stai mescolando componenti "lightweigth" tipici di Swing (il JPopupMenu che compare quando clicchi su un menu) con componenti "heavywheight" tipici di AWT (il tuo ImagePanel cosa estende? Sospetto java.awt.Panel).
Risolvi in fretta dicendo a Swing che vuoi tutti JPopupMenu della tua applicazione in versione "heavyweight":
...
// da qualche parte, prima di inizializzare i menu:
JPopupMenu.setDefaultLightWeightPopupEnabled(false);
...
Ancora meglio: se non sei vicolato da qualche prerequisito ad usare i componenti AWT mollali e usa i corrispettivi componenti Swing (ad esempio java.awt.Panel -> javax.swing.JPanel). Occhio però che il modello di rendering cambia leggermente (non ho letto il tuo codice, quindi non so se fai del rendering custom in qualche componente).
Non faccio alcun tipo di rendering custom :)
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 :D)
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;
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 :)
banryu79
08-11-2010, 08:55
La chiamata JPopupMenu.setDefaultLightWeightPopupEnabled(false) devi farla prima di creare i menu.
La chiamata JPopupMenu.setDefaultLightWeightPopupEnabled(false) devi farla prima di creare i menu.
L'ho fatto , è quello il problema.
Ho provato ad infilarla dappertutto , nulla :(
banryu79
08-11-2010, 12:39
Bon, posta tutta l'ira di dio, appena posso ci do un occhio (non prometto niente, son tempi di ritmi pazzeschi al lavoro)
Ecco tutto l'ambaradan:
//Importazione delle librerie
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;
//Dichiarazione della classe
public class MainFrame extends JFrame
{
//Definizione degli attributi
JMenuBar bar;
JMenu file;
JMenu isto;
//item del menu file
JMenuItem fileApri;
JMenuItem fileEsci;
//item del menu isto
JMenuItem istoNormale;
JMenuItem istoCumulativo;
JButton rgb;
JButton seppia;
JButton negativo;
JButton balloon;
JButton sharpen;
JButton scala;
JButton right;
//bottoni
JButton buttonIsto;
JButton buttonIsto2;
//Definizione dei pannelli delle immagini
PanelImage imgPanel;
PanelImage imgPanel2;
//Definizione dei pannelli degli istogrammi
PanelHistogram histPanel;
PanelHistogram histPanel2;
//Definizione del costruttore
public MainFrame()
{
JPopupMenu.setDefaultLightWeightPopupEnabled(false);
//inizializzazione del frame
this.setTitle("Filtro Immagini");
//this.setSize(900,700);
//inizializzazione degli attributi
this.bar = new JMenuBar();
this.file = new JMenu("File");
this.isto = new JMenu("Istogramma");
this.fileApri = new JMenuItem("Apri");
this.fileEsci = new JMenuItem("Esci");
this.istoNormale = new JMenuItem("Tradizionale");
this.istoCumulativo = new JMenuItem("Cumulativo");
//inizializziazione dei bottoni
//associo i menu alla barra
this.bar.add(this.file);
this.bar.add(this.isto);
//associo la barra al frame
this.setJMenuBar(this.bar);
//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();
//setto il layout del pannello
/*GridBagLayout layout = new GridBagLayout();
GridBagConstraints lim = new GridBagConstraints();
pane.setLayout(layout);*/
//this.setSize(900,750);
this.imgPanel.setPreferredSize(new Dimension(320,320));
this.histPanel.setPreferredSize(new Dimension(320,320));
this.buttonIsto = new JButton("Istogramma Originale");
JPanel left = new JPanel(new BorderLayout(8,8));
left.add(imgPanel, BorderLayout.NORTH);
left.add(buttonIsto, BorderLayout.CENTER);
left.add(histPanel, BorderLayout.SOUTH);
this.imgPanel2.setPreferredSize(new Dimension(320,320));
this.histPanel2.setPreferredSize(new Dimension(320,320));
this.buttonIsto2 = new JButton("Istogramma Modificata");
JPanel right = new JPanel(new BorderLayout(8,8));
right.add(imgPanel2, BorderLayout.NORTH);
right.add(buttonIsto2, BorderLayout.CENTER);
right.add(histPanel2, BorderLayout.SOUTH);
JPanel center = new JPanel(new GridLayout(1, 2, 8, 8));
JPanel bottom = new JPanel(new FlowLayout(FlowLayout.CENTER));
this.rgb = new JButton("Filtro RGB");
bottom.add(rgb);
this.scala = new JButton("Filtro Scala di Grigi");
bottom.add(scala);
this.sharpen = new JButton("Filtro Sharpen");
bottom.add(sharpen);
this.negativo = new JButton("Filtro Negativo");
bottom.add(negativo);
this.seppia = new JButton("Filtro Seppia");
bottom.add(seppia);
this.balloon = new JButton("Filtro Balloon");
bottom.add(balloon);
this.right = new JButton("Filtro Right");
center.add(left);
center.add(right);
JPanel centerWrapper = new JPanel(new FlowLayout());
centerWrapper.add(center);
this.add(centerWrapper, BorderLayout.CENTER);
this.add(bottom, BorderLayout.SOUTH);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
//this.pack();
this.setVisible(true);
//creo un ascoltatore e lo associo agli oggetti
FrameListener listener = new FrameListener(this);
this.addWindowListener(listener);
this.fileApri.addActionListener(listener);
this.fileEsci.addActionListener(listener);
this.istoNormale.addActionListener(listener);
this.istoCumulativo.addActionListener(listener);
this.buttonIsto.addActionListener(listener);
this.buttonIsto2.addActionListener(listener);
this.rgb.addActionListener(listener);
this.scala.addActionListener(listener);
this.sharpen.addActionListener(listener);
this.negativo.addActionListener(listener);
this.seppia.addActionListener(listener);
this.balloon.addActionListener(listener);
this.right.addActionListener(listener);
//JPopupMenu.setDefaultLightWeightPopupEnabled(false);
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
}
//Definizione del metodo main
public static void main(String args[])
{
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
MainFrame frame = new MainFrame();
//rendo visibile il mio frame
//frame.setVisible(true);
}
});
}
}
Grazie in anticipo :)
banryu79
08-11-2010, 13:01
Se il codice che hai postato è effettivamente quello che usi allora non c'è un errore vero e proprio ma una dimenticanza: i menu item [JMenuItem] 'fileApri', 'fileEsci', 'istoNormale' e 'istoCumulativo' non appaiono e non appariranno mai finchè non li aggiungi [add] a qualche menu [JMenu] che hai a sua volta aggiunto alla barra dei menu [JMenuBar].
Se il codice che hai postato è effettivamente quello che usi allora non c'è un errore vero e proprio ma una dimenticanza: i menu item [JMenuItem] 'fileApri', 'fileEsci', 'istoNormale' e 'istoCumulativo' non appaiono e non appariranno mai finchè non li aggiungi [add] a qualche menu [JMenu] che hai a sua volta aggiunto alla barra dei menu [JMenuBar].
Sono un cretino , c'erano nel codice vecchio e , non so perchè , devo averle cancellate per sbaglio. :doh:
Grazie mille ancora , ora funziona tutto perfettamente :)
Salve a tutti di nuovo.
Vorrei aggiungere una Jlabel sopra i PanelImage , lavorando quindi sulle componenti LEFT e RIGHT.
Qual'è il problema? Left e Right hanno le proprietà BorderLayout settabili a North , Center , Sud ecc... e se provo ad inserire una Jlabel con quella proprietà settata su North , me la disegno accanto al pulsante Istogramma.
Questo credo perchè ho quattro oggetti da posizionare ma solo TRE proprietà in "altezza" (North , Sud , Center).
Come potrei ovviare a questo?
Questo è il risultato che vorrei ottenere (le label sono i rettangoli neri).
http://img33.imageshack.us/img33/9492/schemak.th.png (http://img33.imageshack.us/i/schemak.png/)
Uploaded with ImageShack.us (http://imageshack.us)
Grazie mille :)
banryu79
13-12-2010, 08:18
Beh, puoi procedere sull'esempio che ti ha fornito PGI: ridefinisci la griglia aggiungendo una nuova riga, e ripensa e definisci i setting delle constraints dei singoli componenti che piazzerai con GridBagLayout.
Prendi spunto dal codice che ti ha postato PGI, e modificalo.
Se qualcosa di GridBagLayout non ti è chiaro o puoi consultare il tutorial scritto da PGI presente nel forum ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.