View Full Version : [Java] posizionare componenti senza layout manager
devo fare un piccolo progetto per la scuola. Posso fare qualsiasi cosa l'importante è che usi le socket. Siccome pensavo di farlo con interfaccia grafica sto facendo un po' di prove. faccio setLayout(null) nel JFrame però se cerco di posizionare i componenti con setBounds() non c'è verso che si spostino.
qualcuno mi sa aiutare?
al limite, c'è qualche layoutManager semplice da usare, adatto anche per progetti piccoli?
grazie :)
Energy++
16-05-2009, 20:15
io di solito inserisco all'interno del JFrame un JPanel impostato con setLayout(null)
esempio:
/* mainPanel */
JPanel mainPanel = new JPanel();
mainPanel.setLayout(null);
/* JFrame */
/*....
*/
this.getContentPane().add(mainPanel);
e poi posiziono i vari componenti con setBounds all'interno del panel
guarda io ho questo codice
package socketproject;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
public class Gui extends JFrame
{
private static final long serialVersionUID = 4667623015432940473L;
private JPanel panel;
private ButtonDemo button;
public Gui()
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e)
{
System.err.println( "Errore di creazione Look&Feel" );
}
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(600, 400);
this.setLocation(300, 200);
this.setTitle("Provvisorio");
this.setLayout(null);
panel = new JPanel();
panel.setBackground(Color.LIGHT_GRAY);
button = new ButtonDemo("cliccami");
button.addActionListener(button);
panel.add(button);
this.add(panel);
this.setContentPane(panel);
}
}
visualizza il bottone ma se provo a spostarlo non c'è verso.. ho provato ad adattarlo al tuo ma niente, deve esserci una cosa che esclude un'altra.. addirittura nemmeno lo visualizza il bottone.
Energy++
16-05-2009, 20:59
modifica in questo modo:
package socketproject;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
public class Gui extends JFrame
{
private static final long serialVersionUID = 4667623015432940473L;
private JPanel panel;
private ButtonDemo button;
public Gui()
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e)
{
System.err.println( "Errore di creazione Look&Feel" );
}
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(600, 400);
this.setLocation(300, 200);
this.setTitle("Provvisorio");
//this.setLayout(null); //Va fatto sul panel
panel = new JPanel();
panel.setBackground(Color.LIGHT_GRAY);
panel.setLayout(null);
button = new ButtonDemo("cliccami");
button.setBounds(...); //Da sistemare
button.addActionListener(button);
this.getContentPane().add(panel);
panel.add(button);
}
}
guarda, fatto così:
package socketproject;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
public class Gui extends JFrame
{
private static final long serialVersionUID = 4667623015432940473L;
private JPanel panel;
private ButtonDemo button;
public Gui()
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e)
{
System.err.println( "Errore di creazione Look&Feel" );
}
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(600, 400);
this.setLocation(300, 200);
this.setTitle("Provvisorio");
panel = new JPanel();
panel.setLayout(null);
panel.setBackground(Color.LIGHT_GRAY);
button = new ButtonDemo("cliccami");
button.setBounds(400, 300, button.getWidth(), button.getHeight());
button.addActionListener(button);
this.getContentPane().add(panel);
panel.add(button);
}
}
ma non si vede il bottone.. e una cosa, nel setBounds per x e y, devo tenere conto di dove è collocata la finestra?
Energy++
16-05-2009, 21:21
qui devi passare le coordinate x, y (che non dipendono dalla posizione della finestra) e la dimensione del pulsante width e height
button.setBounds(400, 300, button.getWidth(), button.getHeight());
ora non conosco la classe ButtonDemo e quindi non so cosa ritornano i metodi getWidth() e getHeight() (probabilmente ritornano 0 se il pulsante non si vede..) infatti se fai:
button.setBounds(400, 300, 80, 30);
il pulsante viene visualizzato correttamente (avendolo però precedentemente dichiarato come JButton, visto che non ho la classe ButtonDemo che usi tu)
hai ragione :eek:
semplicemente ButtonDemo è una mia classe che deriva da JButton. io mettevo button.width e button.height perchè pensavo non avesse senso dare una dimensione e un'altezza quando comunque è fissa..
grazie comunque :)
Usa un IDE se vuoi realizzare un'interfaccia grafica e non hai il tempo di studiarne il layout.
Impostare il layout a null può sembrare una soluzione ma complica enormemente le cose.
Usa un IDE se vuoi realizzare un'interfaccia grafica e non hai il tempo di studiarne il layout.
Impostare il layout a null può sembrare una soluzione ma complica enormemente le cose.
il problema è che è un progetto scolastico. e il prof lo gradirebbe tutto fatto a scrittura di codice.
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.