Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    115

    Strano problema nell'uso di JFrame

    Ecco il codice incriminato:
    codice:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class TestFinestra {
    	public static void main(String[] args){
    		
    		
    		JFrame frame = new JFrame("Hello Swing"); 
    	 	frame.setVisible(true);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    		frame.setSize(300, 300);
    		JPanel panel = new JPanel();
    		frame.add(panel);
    		JButton button = new JButton("Click here");
    		button.setSize(400,100);
    		panel.add(button);
    		button.addActionListener(new Action());
    }			
    		static class Action implements ActionListener{
    				
    			public void actionPerformed (ActionEvent e) {
    				JFrame frame2 = new JFrame("clicked");
    				frame2.setVisible(true);
    				frame2.setSize(300,300);
    				JLabel label = new JLabel ("You clicked me");
    				JPanel panel = new JPanel();
    				frame2.add(panel);
    				panel.add(label);
    			}
    		}
    			
    	}
    Il problema e' che quando lo lancio il bottone a volte prende le dimensioni che gli ho passato button.setSize(400,100); a volte invece auto imposta la grandezza al minimo indispensabile per contenere il testo del bottone.

    Se rimuovo il comando (setSize(), invece, le volte che non lo dimensiona da solo alla grandezza minima indispensabile non appare proprio il bottone!

    Ha un qualche senso tutto cio'?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Strano problema nell'uso di JFrame

    Originariamente inviato da Virtuoid
    Ha un qualche senso tutto cio'?
    Il JPanel viene messo nella parte CENTER del BorderLayout del content pane (del frame), quindi occupa tutto lo spazio possibile. Il JButton viene messo nel pannello che ha un FlowLayout (per default con allineamento "centrato"), quindi sta centrato orizzontalmente.

    In tali condizioni (uso di layout manager) un setSize() su un componente è inutile e senza effetto. Se c'è un layout manager, esso prende in considerazione alcune, tutte o nessune delle 3 altre proprietà minimumSize/maximumSize/preferredSize (a seconda del layout manager e/o dell'area del layout).

    Se dici che il pulsante "qualche volta" ha la dimensione impostata da setSize(), le cose sono due: o è un qualche "baco" (sono poco propenso per questa ipotesi) oppure è causato da tempistiche "sfortunate" dovute a come hai fatto (in modo poco appropriato) la inizializzazione. Perché tutta la inizializzazione dei componenti l'hai fatta nel "main thread". No, è sempre bene e preferibile farla nel contesto del EDT. Usa SwingUtilities.invokeLater()!!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    115
    Grazie per le tue delucidazioni! ^^ Provero' a fare le dovute modifiche

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.