Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Notepad a schede
Forum - Java - Notepad a schede

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
jock (Normal User)
Pro


Messaggi: 71
Iscritto: 15/01/2010

Segnala al moderatore
Postato alle 9:49
Domenica, 15/04/2012
Ciao a tutti, sto sviluppando un notepad a schede fino a qui tutto bene, il problema sorge che ogni scheda deve contenere una JTextarea specifica nel senso con un nome univoco, per poi andare a salvare eventualmente il testo, pensavo di usare un vettore di JTextarea ma non so quante schede potrebbe aprire un utente, pensavo di usare vector ma non so come impostare in questo caso il codice, sapreste darmi qualche consiglio?

p.s.
Nella JTextarea si possono contare le righe come molti editor di testo per eventualmente andare a correggere eventuali errori?

Ringrazio anticipatamente... :)


PM Quote
Avatar
bububs (Normal User)
Expert


Messaggi: 253
Iscritto: 11/03/2010

Segnala al moderatore
Postato alle 12:45
Domenica, 15/04/2012
Ciao allora è semplice, fai così:
Per gestire le JTextAree coi Vector fai così:
Codice sorgente - presumibilmente Java

  1. Vector<JTextArea> aree = new Vector<JTextArea>();



Per contare le righe di una JTextArea fai così:
Codice sorgente - presumibilmente Plain Text

  1. JTextArea.getLineCount();



Io ti consiglierei invece di usare i Vector le ArratList perchè il primo è deprecato oramai. La differenze sono minime.

Documentazioni Ufficiali:
Jtextarea:http://docs.oracle.com/javase/1.4.2/docs/api/javax/swing/J ...
vector:http://docs.oracle.com/javase/6/docs/api/java/util/Vector. ...
arraylist:http://docs.oracle.com/javase/6/docs/api/java/util/ArrayLi ...

PM Quote
Avatar
jock (Normal User)
Pro


Messaggi: 71
Iscritto: 15/01/2010

Segnala al moderatore
Postato alle 13:45
Domenica, 15/04/2012
Per contare le righe io dicevo una cosa del genere, per ogni riga di testo a sinistra c'è il numero di riga a dx...
http://zetcode.com/articles/images/netbeans.png

Invece non capisco per inserire l'elemento nel vettore, faccio cosi:
Codice sorgente - presumibilmente Java

  1. Vector<JTextArea> aree = new Vector<JTextArea>();
  2. ...
  3. i++;
  4. aree.addElement(new JTextArea());
  5. ma poi per inserirlo nel tab come devo fare io faccio cosi
  6. pane.add("Tab",aree.get(i));



mi da questo errore
Codice sorgente - presumibilmente Delphi

  1. Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 1
  2.         at java.util.Vector.get


PM Quote
Avatar
bububs (Normal User)
Expert


Messaggi: 253
Iscritto: 11/03/2010

Segnala al moderatore
Postato alle 18:38
Domenica, 15/04/2012
Allora eccoti un esempio per quanto riguarda le righe: (l'ho caricato su mediafire)
http://www.mediafire.com/?ef5j9rsdux17e1s

Per i vector mi metti il pezzo di codice interessato, tutto se è possibile così te lo correggo ;)

PM Quote
Avatar
jock (Normal User)
Pro


Messaggi: 71
Iscritto: 15/01/2010

Segnala al moderatore
Postato alle 19:36
Domenica, 15/04/2012
Ti ringrazio ;)

Note.java
Codice sorgente - presumibilmente Java

  1. package note;
  2.  
  3. public class Note{
  4. public static void main(String[] args){
  5. Board f = new Board();
  6. f.setTitle("Note");
  7. f.setSize(500,500);
  8. f.setVisible(true);
  9. //f.setResizable(false);
  10. f.setLocationRelativeTo(null);
  11. }}



Board.java
Codice sorgente - presumibilmente Java

  1. package note;
  2.  
  3. import java.io.*;
  4. import java.awt.*;
  5. import java.awt.event.*;
  6. import javax.swing.*;
  7. import javax.swing.event.*;
  8.  
  9. public class Board extends JFrame{
  10. JMenuBar barra = new JMenuBar();
  11. JMenu file = new JMenu("File");
  12. JMenuItem nuovo = new JMenuItem("Nuovo");
  13. JMenuItem apri = new JMenuItem("Apri");
  14. JMenuItem salva = new JMenuItem("Salva");
  15. JMenuItem esci = new JMenuItem("Esci");
  16. JTabbedPane pane = new JTabbedPane();
  17. int tab = 0;
  18.  
  19. public Board(){
  20. barra.add(file);
  21. file.add(nuovo);
  22. file.add(apri);
  23. file.add(salva);
  24. file.addSeparator();
  25. file.add(esci);
  26. setJMenuBar(barra);
  27. add(pane);
  28. pane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
  29. Nuovo();
  30.  
  31. esci.addActionListener(new ActionListener(){
  32. public void actionPerformed(ActionEvent e){
  33. System.exit(0);
  34. }});
  35.  
  36. nuovo.addActionListener(new ActionListener(){
  37. public void actionPerformed(ActionEvent e){
  38. Nuovo();
  39. }});
  40.  
  41. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  42. }
  43.  
  44. public void Nuovo(){
  45. tab++;
  46. pane.add("Tab"+tab,new JTextArea());
  47. int selIndex = pane.getSelectedIndex();
  48. selIndex = pane.getTabCount()-1;
  49. pane.setSelectedIndex(selIndex);    
  50. }
  51. }



Il problema sta qua
Codice sorgente - presumibilmente Java

  1. pane.add("Tab"+tab,new JTextArea());


Dovrei assegnare un nome univoco per ogni JTextarea che metto in ogni tab che creo, io pensavo di usare vector tu cosa mi consigli e poi dovrei implementarlo con quella cosa delle righe... :)

Ultima modifica effettuata da jock il 15/04/2012 alle 19:37
PM Quote
Avatar
bububs (Normal User)
Expert


Messaggi: 253
Iscritto: 11/03/2010

Segnala al moderatore
Postato alle 23:20
Domenica, 15/04/2012
Certo che il problema sta la perchè come si vede tu gli assegni ogni volta una nuova istanza "libera", cioè non è "registrata" e quindi su cui non puoi far riferimento.
Ma non hai neanche provato ad usare il mio consiglio, sbaglio? Perchè nel codice non c'è traccia di nessuno dei miei consigli :yup: (non è una predica nè :k: )
Comunque sia, il problema si risolve come ti ho detto nei primi post, ovvero in questo modo molto semplice:
Codice sorgente - presumibilmente Java

  1. .....
  2. public class Board extends JFrame{
  3.         JMenuBar barra = new JMenuBar();
  4.         JMenu file = new JMenu("File");
  5.         JMenuItem nuovo = new JMenuItem("Nuovo");
  6.         JMenuItem apri = new JMenuItem("Apri");
  7.         JMenuItem salva = new JMenuItem("Salva");
  8.         JMenuItem esci = new JMenuItem("Esci");
  9.         JTabbedPane pane = new JTabbedPane();
  10.         [b]Vector<JTextArea> aree = new Vector<JTextArea>();[/b]
  11.         int tab = 0;
  12. ......


e successivamente così:
Codice sorgente - presumibilmente Java

  1. ......
  2. public void Nuovo(){
  3.         tab++;
  4.         [b]aree.add(new JTextArea("aree.get("+(tab-1)+")"));[/b]//stampo per verificare solamente che si tratta di ogni istanza del vector, cioè di textarea
  5.         [b]pane.add("Tab"+tab,aree.get(tab-1));[/b]
  6.         int selIndex = pane.getSelectedIndex();
  7.         selIndex = pane.getTabCount()-1;
  8.         pane.setSelectedIndex(selIndex);
  9. }
  10. ......


L'ho provato e funziona perfettamente :rotfl:

Adesso ti chiedo SOLO di provare ad applicare la classe che ti ho messo su mediafire ed applicarla.
Qualora tu riuscissi o meno fammelo sapere sempre qui e io sarò come sempre disponibile ad aiutare :k:

Ultima modifica effettuata da bububs il 15/04/2012 alle 23:22
PM Quote
Avatar
jock (Normal User)
Pro


Messaggi: 71
Iscritto: 15/01/2010

Segnala al moderatore
Postato alle 19:35
Lunedì, 16/04/2012
Ti ringrazio sei un genio!!! ;)
Ci sono alcune cose che vorrei implementare posso farti alcune domande...

1)Ho messo il metodo apri sarebbe apri file con implementazione del conta righe il problema che quando apro il file mi conta solo la prima riga..
Codice sorgente - presumibilmente Java

  1. package note;
  2.  
  3. import java.io.*;
  4. import java.util.*;
  5. import java.awt.*;
  6. import java.awt.event.*;
  7. import javax.swing.*;
  8. import javax.swing.event.*;
  9. import javax.swing.text.Element;
  10.  
  11. public class Board extends JFrame{
  12. JMenuBar barra = new JMenuBar();
  13. JMenu file = new JMenu("File");
  14. JMenu help = new JMenu("?");
  15. JMenuItem nuovo = new JMenuItem("Nuovo",new ImageIcon("img/new.png"));
  16. JMenuItem apri = new JMenuItem("Apri",new ImageIcon("img/open.png"));
  17. JMenuItem salva = new JMenuItem("Salva",new ImageIcon("img/save.png"));
  18. JMenuItem esci = new JMenuItem("Esci",new ImageIcon("img/exit.png"));
  19. JMenuItem info = new JMenuItem("Info",new ImageIcon("img/info.png"));
  20. JTabbedPane pane = new JTabbedPane();
  21. int tab = 0;
  22. int select = 0;
  23. Vector<JTextArea> line = new Vector<JTextArea>();
  24. Vector<JTextArea> aree = new Vector<JTextArea>();
  25. Vector<JScrollPane> jsp = new Vector<JScrollPane>();
  26.  
  27. public Board(){
  28. barra.add(file);
  29. file.add(nuovo);
  30. file.add(apri);
  31. file.add(salva);
  32. file.addSeparator();
  33. file.add(esci);
  34. setJMenuBar(barra);
  35. add(pane);
  36. pane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
  37. Nuovo();
  38. Linee();
  39.  
  40.  
  41. esci.addActionListener(new ActionListener(){
  42. public void actionPerformed(ActionEvent e){
  43. System.exit(0);
  44. }});
  45.  
  46. nuovo.addActionListener(new ActionListener(){
  47. public void actionPerformed(ActionEvent e){
  48. Nuovo();
  49. }});
  50.  
  51. apri.addActionListener(new ActionListener(){
  52. public void actionPerformed(ActionEvent e){
  53. Apri();
  54. }});
  55.  
  56. salva.addActionListener(new ActionListener(){
  57. public void actionPerformed(ActionEvent e){
  58. Save();
  59. }});
  60.  
  61. pane.addChangeListener(new ChangeListener(){
  62. public void stateChanged(ChangeEvent e){
  63. select = pane.getSelectedIndex();
  64. aree.get(select).requestFocusInWindow();
  65. Linee();
  66. }});
  67.  
  68. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  69. }
  70.  
  71. public void Linee(){
  72. aree.get(select).getDocument().addDocumentListener(new DocumentListener(){
  73. public String getText(){
  74. int caretPosition = aree.get(select).getDocument().getLength();
  75. Element root = aree.get(select).getDocument().getDefaultRootElement();
  76. String text = "1" + System.getProperty("line.separator");
  77. for(int i = 2; i < root.getElementIndex( caretPosition ) + 2; i++){
  78. text += i + System.getProperty("line.separator");
  79. }
  80. return text;
  81. }
  82.  
  83. @Override
  84. public void changedUpdate(DocumentEvent de){
  85. line.get(select).setText(getText());
  86. }
  87.  
  88. @Override
  89. public void insertUpdate(DocumentEvent de){
  90. line.get(select).setText(getText());
  91. }
  92.  
  93. @Override
  94. public void removeUpdate(DocumentEvent de){
  95. line.get(select).setText(getText());
  96. }});    
  97. }
  98.  
  99. public void Nuovo(){
  100. tab++;
  101. line.add(new JTextArea("1"));
  102. line.get(tab-1).setBackground(Color.LIGHT_GRAY);
  103. line.get(tab-1).setEditable(false);
  104. aree.add(new JTextArea());
  105. jsp.add(new JScrollPane());
  106. jsp.get(tab-1).getViewport().add(aree.get(tab-1));
  107. jsp.get(tab-1).setRowHeaderView(line.get(tab-1));
  108. jsp.get(tab-1).setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
  109. pane.add("Tab"+(tab),jsp.get(tab-1));
  110. int selIndex = pane.getSelectedIndex();
  111. selIndex = pane.getTabCount()-1;
  112. pane.setSelectedIndex(selIndex);    
  113. }
  114.  
  115. public void Apri(){
  116. try{
  117. JFileChooser fileChooser = new JFileChooser();
  118. int n = fileChooser.showOpenDialog(this);
  119. if(n == JFileChooser.APPROVE_OPTION){
  120. File f = fileChooser.getSelectedFile();
  121. Reader r = new FileReader(f);
  122. tab++;
  123. line.add(new JTextArea("1"));
  124. line.get(tab-1).setBackground(Color.LIGHT_GRAY);
  125. line.get(tab-1).setEditable(false);
  126. aree.add(new JTextArea(""+(tab-1)));
  127. aree.get(tab-1).read(r,null);
  128. jsp.add(new JScrollPane());
  129. jsp.get(tab-1).getViewport().add(aree.get(tab-1));
  130. jsp.get(tab-1).setRowHeaderView(line.get(tab-1));
  131. jsp.get(tab-1).setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
  132. pane.add(f.getName(),jsp.get(tab-1));
  133. int selIndex = pane.getSelectedIndex();
  134. selIndex = pane.getTabCount()-1;
  135. pane.setSelectedIndex(selIndex);
  136. }}catch(Exception ex){}
  137. }
  138.  
  139. public void Save(){
  140. try{
  141. JFileChooser fileChooser = new JFileChooser();
  142. int n = fileChooser.showSaveDialog(this);
  143. if(n == JFileChooser.APPROVE_OPTION) {
  144. File f = fileChooser.getSelectedFile();
  145. write.append(aree.get(select).getText());
  146. write.flush();
  147. write.close();
  148. }}catch(Exception ex){}
  149. }
  150.  
  151. }


Come posso risolvere?
2)Quando apro un file e lo modifico e clicco su salva vorrei che mi salvasse il file senza che mi chieda il percorso o quando creo un nuovo file e lo salvo per la prima volta cambiando anche il nome della tab con nomedelfile.estenzione e la seconda volta lo ri-salvo venga ri-salvato nello stesso percorso di prima pensavo di usare un vettore se è 0 vuol dire che non esiste un percorso se è diverso prendo il percorso esistente, secondo potrebbe funzionare? O ci sono soluzioni più eleganti? :)

Ultima modifica effettuata da jock il 16/04/2012 alle 19:40
PM Quote
Avatar
bububs (Normal User)
Expert


Messaggi: 253
Iscritto: 11/03/2010

Segnala al moderatore
Postato alle 23:11
Martedì, 17/04/2012
Grazie ;)
Per il primo punto sto vedendo come risolverlo. Comunque riesci a spiegarti meglio nel secondo punto. Grazie :k:

PM Quote
Avatar
jock (Normal User)
Pro


Messaggi: 71
Iscritto: 15/01/2010

Segnala al moderatore
Postato alle 6:37
Mercoledì, 18/04/2012
Ci proverò...

es.
Apro una nuova scheda e incomincio a scrivere poi ammettiamo che lo vorrei salvare e faccio salva, mi chiede dove vorrei salvarlo ed uso la funziona Save, la seconda volta che faccio salva vorrei che non mi chiedesse più dove salvarlo ma che lo salvasse direttamente dove l'ho avevo salvato in precedenza...
La stessa cosa quando apro un file faccio salva, vorrei fare in modo che non mi chiedesse più il percorso del file ma che lo salvasse direttamente nel percorso dove si trova il file, con lo stesso nome e la stessa estensione...

p.s.
Non so se funziona che ne pensi di http://fifesoft.com/rsyntaxtextarea/ cosi potrei implementare anche Syntax highlighting ;)
Ho scaricato i file il problema che non mi trova la libreria...

Ultima modifica effettuata da jock il 18/04/2012 alle 7:15
PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo