Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    problema con .setSize in Swing con Java

    Buonasera a tutti! spero di scrivere nella sezione giusta, sono nuovo e non so se sono nel posto giusto o meno.

    Sto scrivendo un piccolo programmino in JAVA. sono un vero e proprio niubbo, quindi vi chiedo di essere il più elementari possibili

    ho un problema "grafico" : ho creato una finestra a cui ho aggiunto dei TabbedPane, dei bottoni, una ComboBox e altri elementi. tutto funziona bene, tranne il fatto che non mi PRENDE il comando per settare la dimensione del FRAME, la mia finestra principale che contiene tutti questi elementi. il comando in se non mi sembra difficile, metto .setSize (300, 300 ) , ma lo ignora, quando apro il programma mi lancia una bruttissima finestra enorme -.-

    gli altri comandi li accetta; ad esempio, se uso il metodo .setResizable(true/false) mi permette o meno di ridimensionare la finestra, secondo voi perche invece il .setSize me lo ignora? cerco di allegarvi il codice ora, non metto tutto quanto senno viene troppo lungo

    ecco qui il mio codice:

    codice:
    JFrame frame = new JFrame("Timer");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.addWindowListener(this);
    // initialize containers
    JTabbedPane tabs = new JTabbedPane();
    tabs.setFont ( new Font("Standard", Font.BOLD|Font.ITALIC, 17));
    JPanel timerTab = new JPanel(new BorderLayout());
    JPanel projectsTab = new JPanel(new BorderLayout());
    JPanel timerButtonsPanel = new JPanel(new GridLayout(1, 3));
    JPanel projectButtonsPanel = new JPanel (new GridLayout (2,1));
    // initializing elements
    projectsBox = new JComboBox(projects);
    projectsTable = new JTable(tableModel);
    projectsTable.setRowHeight(25);
    tableModel.addColumn("Elenco Progetti Aperti");
    for(int i = 0; i < projects.length; i++)
    	{
    		tableModel.addRow(new String[] {projects[i]});
    	}
    		
    clockLabel = new ClockLabel(controller);
    		
    playPauseButton = new JButton("Play pause");
    resetButton = new JButton("Reset");
    closeProjectButton = new JButton("Close Project");
    addProjectButton = new JButton("Add Project");
    removeButton=new JButton("Remove Project");
    
    
    frame.add(tabs, BorderLayout.CENTER);
    frame.setSize (300,300);
    frame.setResizable(true);
    frame.setLocation (650 , 220);
    .setSize non funziona

    Spero qualcuno sia in grado di aiutarmi!!! grazie a tutti comunque in anticipo!!! buona serata!!!!

    Andrea Lenzi

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    In Swing tutti i contenitori sono regolati da un LayoutManager.
    Di conseguenza, posizionamento e dimensionamento dei vari controlli sono regolati dal LayoutManager. Che significa, non ti devi preoccupare tu di posizionare (a livello di coordinate) e dimensionare gli oggetti perchè si arrangia il LayoutManager.

    Vuoi poter dimensionare i tuoi componenti? Ci sono due strade:

    1) Usi setPreferredSize() in modo da "istruire" il LayoutManager su quale debba essere la dimensione preferita per il componente (non tutti i LayoutManager tengono in considerazione tale valore)

    2) Togli di mezzo il LayoutManager e tutto il lavoro di posizionamento e dimensionamento (anche in relazione ai ridimensionamenti della finestra) è a carico tuo e userai setLocation() e setSize() o, in un unica istruzione setBounds().

    Ti conviene studiare il funzionamento di Swing ed, in particolare, dei LayoutManager.

    Togliere di mezzo il LayoutManager può non essere una scelta saggia.

    PS: usa i tag CODE quando posti del codice... in questo modo verrà mantenuta la formattazione e l'indentazione del codice.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Ciao LeleFT, ti ringrazio per la risposta!

    Hai colto nel segno, sicuramente non sono un esperto di SWING quindi hai ragione, me lo devo vedere meglio! posso provare a ragionare un attimo con te però? pur nella mia limitata conoscenza, ho capito che il LAYOUT manager gestisce i vari componenti che creo inserendoli nei vari contenitori via via sempre più "grandi" secondo il layout che gli specifico di volta in volta. il bottone dentro un contenitore, questo contenitore dentro un altro contenitore, e così via fino ad arrivare alla finestra "principale" che contiene tutto, giusto? ora ti chiedo, a me non importa delle dimensioni e delle posizioni dei componenti all'interno della mia finestra principale, che mi vanno benissimo come sono messi. io vorrei solo settare la dimensione della mia finestra principale (frame) , che li contiene tutti. non capisco come mai il comando frame.setResizable funziona, ovvero se ridimensiono la finestra si ridimensiona con tutto il suo contenuto, mentre frame.setSize proprio non lo considera, e non mi parte dalle dimensioni che gli imposto io.

    Ho creato qualche conflitto per via della gestione dei componenti interni tramite il layout manager?

    Grazie mille per la tua pazienza, e per il consiglio di usare il TAG CODE!

    Andrea

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.