Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 32
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123

    [Java] Aprire più file su un editor

    Ciao a tutti.

    Volevo scrivere un editor che permettesse l'apertura di più "schede" contenenti il nome del file, per intenderci come queste:

    http://notepad-plus.sourceforge.net/..._lexerHTML.gif

    Come posso farlo?

    Grazie mille!^^

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    JTabbedPane.

    E in ogni scheda ci metti un tuo editor.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Vero!

    Grazie!

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Pensavo di cavarmela con pochi inghippi..invece eccomi qui!

    Ho una classe che crea ed aggiunge i vari componenti e che estende JFrame (crea i menù, la barra di menù, un JTextPane..). Questa classe contiene solo l'implementazione di keyPressed(); i click sui menù vengono elaborati da un altra classe, che si occupa quindi di svolgere il compito desiderato (come ad esempio salvare il file).

    Come posso fare ad aggiungere questi benedetti JTabbedPane, e soprattutto, una volta creato il primo fare in modo che vengano creati ogni volta che si apre un nuovo file? (la seconda parte è "collegata" alla prima, cioè, conoscendo la prima riuscirò anche nella seconda :P) Premetto che ho già guardato il tutorial della Sun e la classe JTabbedPane sempre sul sito della Sun.

    PS: JPanel è un componente generico giusto?

    Grazie per l'aiuto!

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Patrick Jane
    Come posso fare ad aggiungere questi benedetti JTabbedPane, e soprattutto, una volta creato il primo fare in modo che vengano creati ogni volta che si apre un nuovo file?
    Parti da questo esempio semplice e volutamente minimale:

    codice:
    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import javax.swing.*;
    
    public class MultiEditorFrame extends JFrame {
        private JTabbedPane editorTabbedPane;
        private JButton openFileButton;
        private JFileChooser fileChooser;
    
        public MultiEditorFrame() {
            super("Multi Editor");
    
            setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            setSize(600, 500);
    
            editorTabbedPane = new JTabbedPane();
            openFileButton = new JButton("Open File");
    
            getContentPane().add(openFileButton, BorderLayout.NORTH);
            getContentPane().add(editorTabbedPane, BorderLayout.CENTER);
    
            openFileButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    openFile();
                }
            });
        }
    
        private void openFile() {
            if (fileChooser == null) {
                fileChooser = new JFileChooser();   // Istanzio alla prima richiesta, perché tipicamente "pesante".
    
                // Eventuale impostazione filtri e altro sul chooser ...
            }
    
            int r = fileChooser.showOpenDialog(this);
    
            if (r == JFileChooser.APPROVE_OPTION) {
                File f = fileChooser.getSelectedFile();
    
                try {
                    EditorPane editorPane = new EditorPane(f);
    
                    editorTabbedPane.addTab(f.getName(), editorPane);
                    editorTabbedPane.setSelectedComponent(editorPane);
                } catch (IOException e) {
                    JOptionPane.showMessageDialog(this, "Errore di I/O");
                }
            }
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    new MultiEditorFrame().setVisible(true);
                }
            });
        }
    }
    
    
    class EditorPane extends JPanel {
        private JTextArea textArea;
        private JScrollPane scrollPane;
    
        public EditorPane(File f) throws IOException {
            super(new BorderLayout());
    
            textArea = new JTextArea();
    
            FileReader fr = new FileReader(f);   // Presuppongo charset della piattaforma
    
            try {
                textArea.read(fr, null);
            } finally {
                fr.close();
            }
    
            scrollPane = new JScrollPane(textArea);
            add(scrollPane, BorderLayout.CENTER);
        }
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Sei un grande!!

    Ottenevo quella "schermata grigia", ma solo guardando il tuo source mi son reso conto di omettere questo pezzo

    codice:
     getContentPane().add(editorTabbedPane, BorderLayout.CENTER);
    Puoi spiegarmi (dato che non mi è molto chiaro), che fanno di preciso:

    setContentPane()

    e

    getContentPane()

    setContentPane() si occupa "solo" di settare il componente che viene passato nella finestra?

    Grazie!!!

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Patrick Jane
    setContentPane()

    e

    getContentPane()
    Vedi qui sul tutorial Sun dove spiega come sono fatti i componenti "top level" JFrame ecc....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Ok Va bene!

    Ho un altra domanda..
    Vorrei mettere anche la possibilità di chiudere una certa scheda, ho visto un esempio di codice (sempre della sun), ma non mi è chiaro come metterci la 'x' per la chiusura (poi ho visto che deve comunque essere gestita da un actionPerformed()).

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Patrick Jane
    ma non mi è chiaro come metterci la 'x' per la chiusura (poi ho visto che deve comunque essere gestita da un actionPerformed()).
    Mettere una opzione di chiusura sulle "linguette" non è banale. Non è implementato di default e solo da Java 6 si può mettere un generico "Component" con setTabComponentAt() sulla linguetta (cosa che permette ad esempio di mettere un JButton "X" sulla linguetta).

    Vedi questa discussione in cui avevo fatto un esempio.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Che casino..

    In quel codice scrivi anche
    // NOTA: in realtà per fare una gestione completa bisognerebbe
    // fare l'override
    anche di svariati altri metodi es. setTitleAt(),
    // setIconAt(), ecc... E modificare anche TabPanel per poter
    // passare tali dati.
    E se non viene fatto, può causare problemi? (malfunzionamenti)

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.