Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it L'avatar di Wave
    Registrato dal
    May 2003
    Messaggi
    644

    [Java] JFrame e setSize()

    vorrei creare giusto così per prendere la mano con il framework Swing un editor di testo...

    per ora ho buttato giù il codice per quanto riguarda la GUI, solo una cosa non va....

    ho creato un JFrame dove ho impostato un BorderLayout.

    A"Nord" ho messo il un JMenuBar e al "Centro" ho messo un JTextArea

    non riesco a capire perchè se prendo il mio JFrame e con il metodo setSize(600,600) gli impongo le dimensioni, all'esecuzione non vengono impostate e la finestra appare piccola piccola e mi tocca ridimensionarla a mano..
    LINUX
    Powered by Ubuntu
    Powered by MacOS X


    ...vivi la tua vita come se ogni giorno fosse l'ultimo, poichè un giorno lo sarà...

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Per prima cosa, dato che hai un JFrame è ragionevole utilizzare il metodo setJMenuBar() per aggiungere una barra dei menu: questo metodo ti consente di avere a disposizione tutti gli elementi del BorderLayout, senza utilizzare il NORTH e delegare al JFrame stesso tutte le operazioni di Lay out della barra di menu.

    Seconda cosa: dovresti postare un po' di codice perchè così su due piedi è un po' difficile capire come mai le dimensioni non rispettino quelle da te indicate. L'esperienza mi induce a pensare che tu abbia utilizzato il metodo pack(), il quale se ne frega altamente delle dimensioni che hai impostato per la finestra e ridimensiona quest'ultima in modo da occupare il minor spazio possibile a video (un metodo più inutile di questo è veramente difficile trovarlo, a mio avviso...)


    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
    Utente di HTML.it L'avatar di Wave
    Registrato dal
    May 2003
    Messaggi
    644
    grazie del consiglio...il problema era proprio il metodo pack()....non sapevo cosa facesse in realtà di preciso, sono stato sempre abituato a chiamarlo e non mi aveva mai creato problemi fino ad ora....

    cmq sia ho seguito il tuo consiglio facendo gestire la JMenuBar al Frame e così ho liberato il pannello NORTH del Layout e ho aggiunto una JToolBar con dei bottoni...

    grazie ancora...


    P.S. continuerei a postare qui qualora avessi altri problemi...sempre se va bene ai moderatori...
    LINUX
    Powered by Ubuntu
    Powered by MacOS X


    ...vivi la tua vita come se ogni giorno fosse l'ultimo, poichè un giorno lo sarà...

  4. #4
    Utente di HTML.it L'avatar di Wave
    Registrato dal
    May 2003
    Messaggi
    644
    come promesso posto qui in quanto ho riscontrato un problemino nella mia applicazione....

    questo è il codice della classe (per ora sto creando solo la gui):
    codice:
    package jeditor.gui;
    
    import javax.swing.*;
    import java.awt.*;
    
    public class JEditor extends JFrame {
    
    	//Il Frame principale
    	JFrame jeditor;
    	
    	//I bottoni della toolbar
    	JButton newButton;
    	JButton openButton;
    	JButton saveButton;
    	JButton cutButton;
    	JButton copyButton;
    	JButton pasteButton;
    	
    	//Gli item del menu Edit
    	JMenuItem cutMenuItem;
    	JMenuItem copyMenuItem;
    	JMenuItem pasteMenuItem;
    	
    	//Gli item del menu File
    	JMenuItem newMenuItem;
    	JMenuItem openMenuItem;
    	JMenuItem saveMenuItem;
    	
    	
    	//L'area di testo
    	JTextArea editor;
    	
    	//I menu File e Edit
    	JMenu menu_edit;
    	JMenu menu_file;
    	
    	//La barra dei menu
    	JMenuBar menubar;
    	
    	//La barra dei bottoni
    	JToolBar toolbar;
    	
    	/**
    	 * Costruisce il frame con l'editor, la toolbar e la menubar
    	 *
    	 */
    	public JEditor() {
    	    
    	    buildMenuBar();
    	    
    	    buildToolBar();
            
    	    
    		editor = new JTextArea();
    		
    		jeditor = new JFrame("JEditor");
    	    
    	    jeditor.setSize(300,300);
    	    jeditor.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	    
    	    jeditor.getContentPane().setLayout(new BorderLayout());
    	    jeditor.getContentPane().add(BorderLayout.NORTH, toolbar);
    	    jeditor.getContentPane().add(BorderLayout.CENTER, new JScrollPane(editor));
    	    jeditor.setJMenuBar(menubar);
    	    
    	    jeditor.setVisible(true);
    		
    	}
    	
    	protected void buildMenuFile() {
    		
    		newMenuItem = new JMenuItem("New");
    		openMenuItem = new JMenuItem("Open");
    	    saveMenuItem = new JMenuItem("Save");
    	    	
    	    menu_file = new JMenu("File");
    	    
    	    menu_file.add(newMenuItem);
            menu_file.add(openMenuItem);
            menu_file.addSeparator();
            menu_file.add(saveMenuItem);
    	}
    	
    	protected void buildMenuEdit() {
    		
    	    cutMenuItem = new JMenuItem("Cut");
    	    copyMenuItem = new JMenuItem("Copy");
    	    pasteMenuItem = new JMenuItem("Paste");
    	    
    	    menu_edit = new JMenu("Edit");
    	    
            menu_edit.add(cutMenuItem);
            menu_edit.add(copyMenuItem);
            menu_edit.add(pasteMenuItem);
    	}
    	
    	protected void buildMenuBar() {
    		
    		menubar = new JMenuBar();
    	    
    	    menubar.add(menu_file);
    	    menubar.add(menu_edit);
    		
    	}
    	
    	protected void buildButton() {
    		
    		newButton = new JButton("New");
    		openButton = new JButton("Open");
    	    saveButton = new JButton("Save");
    	    cutButton = new JButton("Cut");
    	    copyButton = new JButton("Copy");
    	    pasteButton = new JButton("Paste");
    		
    	}
    	
    	protected void buildToolBar() {
    		
    		buildButton();
    		
    		toolbar = new JToolBar();
    	    
    		toolbar.add(newButton);
    	    toolbar.add(openButton);
    	    toolbar.add(saveButton);
    	    toolbar.addSeparator();
    	    toolbar.add(cutButton);
    	    toolbar.add(copyButton);
    	    toolbar.add(pasteButton);
    	}
        
    }
    e questo è il codice della classe che uso come test:

    codice:
    package jeditor;
    
    import jeditor.gui.*;
    import javax.swing.*;
    
    public class JEditorTest {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		
    		JFrame editor = new JEditor();
    		
    		editor.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		
    		editor.show();
    
    	}
    
    }
    1) come faccio a compilare un singolo file in Eclipse????e che differenza c è tra compilare e utilizzare il comando Build di Eclipse????

    2)ho provato a compilare i file da console:
    - prima compilo il file JEditor.java presente nella cartella jeditor/gui e questo si compila senza problemi.
    - secondo compilo il file JEditorTest.java presente nella cartella jeditor/test ma qui viene fuori un eccezione che dice che il package jeditor.gui non esiste ma questo non è vero....

    come mai???

    3)ho fatto bene a creare quei metodi protected ausiliari all'interno della classe che estende JFrame che mi facilitano la lettura del codice del costruttore???
    LINUX
    Powered by Ubuntu
    Powered by MacOS X


    ...vivi la tua vita come se ogni giorno fosse l'ultimo, poichè un giorno lo sarà...

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Allora,

    2) I nomi dei packages con i puntini personalmente non mi piacciono tanto e li ho sempre evitati. Può darsi che sia una fissa mia, ma nei nomi non metto mai niente altro che alfanumerici e underscores.

    1) Non so, non ho Eclipse sotto mano

    3) per l'uso che ne stai facendo adesso, potevi dichiararli anche private. Invece non capisco perché crei l'editor che estende JFrame e poi nel costruttore definisci un altro JFrame quando avresti potuto semplicemente chiamare super("JEditor")
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    Utente di HTML.it L'avatar di Wave
    Registrato dal
    May 2003
    Messaggi
    644
    si scusami...per quanto riguarda i metodi li ho definiti private in un secondo momento....li mi ero scordato di correggerli...


    per quanto riguarda il package io ho semplicemente creato una cartella "jeditor" con due sottocartelle :

    "gui"

    e

    "test"

    il file con la gui l ho messo nella cartella gui e quindi la dichiarazione del package sara:

    package jeditor.gui;

    non penso sia sbagliato....

    è anche vero che l'organizzazione dei file in un progetto java non è che mi sia molto chiara....
    LINUX
    Powered by Ubuntu
    Powered by MacOS X


    ...vivi la tua vita come se ogni giorno fosse l'ultimo, poichè un giorno lo sarà...

  7. #7
    Utente di HTML.it L'avatar di Wave
    Registrato dal
    May 2003
    Messaggi
    644
    Ho risolto....mi ero scordato di inizializzare il menu e quindi non mi faceva partire l'interfaccia grafica....

    ora mi concentro sull'abbellimento della gui con le icone e poi passo alla gestioni degli eventi...

    grazie
    LINUX
    Powered by Ubuntu
    Powered by MacOS X


    ...vivi la tua vita come se ogni giorno fosse l'ultimo, poichè un giorno lo sarà...

  8. #8
    Utente di HTML.it L'avatar di Wave
    Registrato dal
    May 2003
    Messaggi
    644
    mmmmhhh......sono arrivato all'implementazione degli ascoltatori degli eventi....ora come ora i codici del mio programma sono così:

    codice:
    package jeditor.gui;
    
    import javax.swing.*;
    import java.awt.*;
    
    public class JEditor extends JFrame {
    	
    	//I bottoni della toolbar
    	JButton newButton;
    	JButton openButton;
    	JButton saveButton;
    	JButton cutButton;
    	JButton copyButton;
    	JButton pasteButton;
    	
    	//Gli item del menu Edit
    	JMenuItem cutMenuItem;
    	JMenuItem copyMenuItem;
    	JMenuItem pasteMenuItem;
    	
    	//Gli item del menu File
    	JMenuItem newMenuItem;
    	JMenuItem openMenuItem;
    	JMenuItem saveMenuItem;
    	
    	
    	//L'area di testo
    	JTextArea editor;
    	
    	//I menu File e Edit
    	JMenu menu_edit;
    	JMenu menu_file;
    	
    	//La barra dei menu
    	JMenuBar menubar;
    	
    	//La barra dei bottoni
    	JToolBar toolbar;
    	
    	/**
    	 * Costruisce il frame con l'editor, la toolbar e la menubar
    	 *
    	 */
    	public JEditor() {
    	    
    	    super("JEditor");
    		
    	    buildMenuBar();
    	    
    	    buildToolBar();
            
    	    addListeners()
    	    
                editor = createEditor();
    		
    		
    	    setSize(500,400);
    	    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	    
    	    getContentPane().setLayout(new BorderLayout());
    	    getContentPane().add(BorderLayout.NORTH, toolbar);
    	    getContentPane().add(BorderLayout.CENTER, new JScrollPane(editor));
    	    setJMenuBar(menubar);
    	    
    	    setVisible(true);
    		
    	}
    	//Crea il menu File
    	private void buildMenuFile() {
    		
    	    newMenuItem = new JMenuItem("New", new ImageIcon("images/button.new.gif"));
    	    openMenuItem = new JMenuItem("Open", new ImageIcon("images/button.open.gif"));
    	    saveMenuItem = new JMenuItem("Save", new ImageIcon("images/button.save.gif"));
    	    	
    	    menu_file = new JMenu("File");
    	    
    	    menu_file.add(newMenuItem);
                menu_file.add(openMenuItem);
                menu_file.addSeparator();
                menu_file.add(saveMenuItem);
    	}
    	//Crea il menu Edit
    	private void buildMenuEdit() {
    		
    	    cutMenuItem = new JMenuItem("Cut", new ImageIcon("images/button.cut.gif"));
    	    copyMenuItem = new JMenuItem("Copy", new ImageIcon("images/button.copy.gif"));
    	    pasteMenuItem = new JMenuItem("Paste", new ImageIcon("images/button.paste.gif"));
    	    
    	    menu_edit = new JMenu("Edit");
    	    
                menu_edit.add(cutMenuItem);
                menu_edit.add(copyMenuItem);
                menu_edit.add(pasteMenuItem);
    	}
    	//Crea la barra dei menu
    	private void buildMenuBar() {
    		
    	    buildMenuEdit();
                buildMenuFile();
    		
    	    menubar = new JMenuBar();
    	    
    	    menubar.add(menu_file);
    	    menubar.add(menu_edit);
    		
    	}
    	//Crea i bottoni
    	private void buildButton() {
    		
    	    newButton = new JButton(new ImageIcon("images/button.new.gif"));
    	    openButton = new JButton(new ImageIcon("images/button.open.gif"));
    	    saveButton = new JButton(new ImageIcon("images/button.save.gif"));
    	    cutButton = new JButton(new ImageIcon("images/button.cut.gif"));
    	    copyButton = new JButton(new ImageIcon("images/button.copy.gif"));
    	    pasteButton = new JButton(new ImageIcon("images/button.paste.gif"));
    		
    	    newButton.setToolTipText("New");
    	    openButton.setToolTipText("Open");
    	    saveButton.setToolTipText("Save");
    	    cutButton.setToolTipText("Cut");
    	    copyButton.setToolTipText("Copy");
    	    pasteButton.setToolTipText("Paste");
    	
    	}
    	//Crea la toolbar
    	private void buildToolBar() {
    		
    	    buildButton();
    		
    	    toolbar = new JToolBar();
    	    
    	    toolbar.add(newButton);
    	    toolbar.add(openButton);
    	    toolbar.add(saveButton);
    	    toolbar.addSeparator();
    	    toolbar.add(cutButton);
    	    toolbar.add(copyButton);
    	    toolbar.add(pasteButton);
    	}
    	 JTextArea createEditor() {
    		
    		return new JTextArea();
    		
    	}
        }
    e per quanto riguarda la classe per il test:

    codice:
    package jeditor.test;
    
    import jeditor.gui.JEditor;
    import javax.swing.*;
    
    public class JEditorTest {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		
    		JFrame editor = new JEditor();
    		
    		editor.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		
    		editor.show();
    
    	}
    
    }

    ora devo aggiungere ai bottoni e agli elementi dei menu un ActionListener tramite il metodo addActionListener()

    prima ero abituato con Netbeans che me li faceva tutti lui automaticamente tramite il gui editor...
    per questo motivo non è che mi è molto chiara la situazione....

    qualcuno potrebbe darmi delucidazioni in merito???

    grazie dell aiuto
    LINUX
    Powered by Ubuntu
    Powered by MacOS X


    ...vivi la tua vita come se ogni giorno fosse l'ultimo, poichè un giorno lo sarà...

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    il mio commento sui puntini... bhè dovevo essermi bevuto il cervello insieme ad una o due birre di troppo

    Per quanto riguarda le azioni, devi implementare la classe ActionListener e quindi scrivere un opportuno metodo actionPerformed oppure tramite classi interne, soluzione più valida in caso di molti bottoni (codice meglio gestibile)

    codice:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class innerActions extends JFrame {
      
      JButton Save, Open;
      ActionListener save, open;
      
      public innerActions() {
        super("Ciao");
        createButtons();
        this.getContentPane().setLayout(new GridLayout(2,1));
        this.getContentPane().add(Save);
        this.getContentPane().add(Open);
        this.setSize(400, 300);
        this.setVisible(true);    
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      }
      
      private void createButtons() {
        Save = new JButton("Save");
        Open = new JButton("Open");
        
        save = new ActionListener() {
          public void actionPerformed(ActionEvent ae) {
            System.out.println("Sto salvando");
          }
        };
        
        open = new ActionListener() {
          public void actionPerformed (ActionEvent ae) {
            System.out.println("Sto aprendo");
          }
        };
        
        Save.addActionListener(save);
        Open.addActionListener(open);
      }
      
      public static void main (String arg[]) {
        innerActions ia = new innerActions();
      }
    }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  10. #10
    Utente di HTML.it L'avatar di Wave
    Registrato dal
    May 2003
    Messaggi
    644
    ciao andrea....quindi mi consigli di mettere tutto il codice in nel file JEditor.java???

    non ci sarebe un modo per metterelo in un altro file giusto per rendere il tutto più modulare e più facilmente modificabile in futuro???

    intanto mi metto ad implementare i metodi come mi hai suggerito...

    ciao ciao
    LINUX
    Powered by Ubuntu
    Powered by MacOS X


    ...vivi la tua vita come se ogni giorno fosse l'ultimo, poichè un giorno lo sarà...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.