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!^^
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!^^
JTabbedPane.
E in ogni scheda ci metti un tuo editor.
<´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
"The answer to your question is: welcome to tomorrow"
Vero!
Grazie!
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!
Parti da questo esempio semplice e volutamente minimale: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?
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.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Sei un grande!!
Ottenevo quella "schermata grigia", ma solo guardando il tuo source mi son reso conto di omettere questo pezzo
Puoi spiegarmi (dato che non mi è molto chiaro), che fanno di preciso:codice:getContentPane().add(editorTabbedPane, BorderLayout.CENTER);
setContentPane()
e
getContentPane()
setContentPane() si occupa "solo" di settare il componente che viene passato nella finestra?
Grazie!!!![]()
Vedi qui sul tutorial Sun dove spiega come sono fatti i componenti "top level" JFrame ecc....Originariamente inviato da Patrick Jane
setContentPane()
e
getContentPane()
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
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()).
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).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()).
Vedi questa discussione in cui avevo fatto un esempio.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Che casino..
In quel codice scrivi anche
E se non viene fatto, può causare problemi? (malfunzionamenti)// 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.