Ansharja ha scritto:
Ho provato ad eseguire il programma qualche volta ma non ottengo risultati diversi, riesci a spiegare come cambiano le dimensioni o meglio a fornire due screenshot di esempio?
Sono dei JPanel annidati,
panel_1 allinea tutti i componenti in colonna tramite BoxLayout.Y_AXIS, e contiene Panel_2.
panel_2 allinea tutti i componenti a sinistra tramite FlowLayout(FlowLayout.LEFT), e contiene Panel_3.
panel_3 allinea tutti i componenti in tre righe ed una colonna tramite GridLayout(3,1), ed aggiunge:
in riga 1, panel_4 che, allinea tutti i componenti in tre righe e due colonne tramite GridLayout(3,2), ed aggiunge 4 JLabel e due JTextField.
Il risultato a video è il seguente:
A seguire, riga 2 di panel_3 aggiunge una JTextArea, ed i componenti iniziano ad avere dimensioni spropositate:
Infine, riga 3 di panel_3, aggiunge panel_5 che allinea tutti i componenti in una riga e due colonne, aggiungendo due JButton, che si ingrandiscono spropositamente anch'essi:
Perchè le dimensioni dei componenti mi variano, invece di avere una loro dimensione fissa? mi si ingrandiscono pari al componente più grande presente in un JPanel, in questo caso, si sono ingranditi in propozione alle dimensioni della JTextArea.
Infine, abituati a preferire il metodo pack () di JFrame rispetto al setSize ()
Ci ho provato, ma la finestra asssume queste dimensioni:
Tieni comunque presente che il modo corretto per costruire e rendere visibile il frame è eseguire il codice relativo all'interno del contesto dell'EDT (Event Dispatch Thread), tipicamente questo si fa inserendo il codice dentro al metodo invokeLater della classe SwingUtilities, trovi tonnellate di esempi in internet (o sui libri), a partire dal tutorial ufficiale.
Perfetto, non lo sapevo, ora il codice è eseguito nell'event dispatching thread
package gui;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class Main {
private static void createAndShowGUI() {
JFrame myjframe = new JFrame("PROVA MENU");
myjframe.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
// myjframe.pack();
myjframe.setSize(800, 600);
Container mycontainer = myjframe.getContentPane();
mycontainer.setLayout(new BorderLayout());
JPanel panel_1 = new JPanel();
panel_1.setLayout(new BoxLayout(panel_1, BoxLayout.Y_AXIS));
JPanel panel_2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
JPanel panel_3 = new JPanel(new GridLayout(3,1));
JPanel panel_4 = new JPanel(new GridLayout(3,2));
JPanel panel_5 = new JPanel(new GridLayout(1, 2));
JLabel empty = new JLabel();
JLabel label_1 = new JLabel("Valore campo JTextField 1: ");
JLabel label_2 = new JLabel("Valore campo JTextField 2: ");
JLabel label_3 = new JLabel("Valore campo JTextArea 1: ");
JTextField text_1 = new JTextField();
JTextField text_2 = new JTextField();
JTextArea text_3 = new JTextArea(7,21);
JButton bottone_1 = new JButton("Indietro");
JButton bottone_2 = new JButton("Avanti");
panel_4.add(label_1);
panel_4.add(text_1);
panel_4.add(label_2);
panel_4.add(text_2);
panel_4.add(label_3);
panel_4.add(empty);
panel_5.add(bottone_1);
panel_5.add(bottone_2);
panel_3.add(panel_4);
panel_3.add(text_3);
panel_3.add(panel_5);
panel_2.add(panel_3);
panel_1.add(panel_2);
mycontainer.add(panel_1, BorderLayout.NORTH);
myjframe.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}