15/04/12 17:36
jock
Ti ringrazio
Note.java
package note;
public class Note{
public static void main(String[] args){
Board f = new Board();
f.setTitle("Note");
f.setSize(500,500);
f.setVisible(true);
//f.setResizable(false);
f.setLocationRelativeTo(null);
}}
Board.java
package note;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class Board extends JFrame{
JMenuBar barra = new JMenuBar();
JMenu file = new JMenu("File");
JMenuItem nuovo = new JMenuItem("Nuovo");
JMenuItem apri = new JMenuItem("Apri");
JMenuItem salva = new JMenuItem("Salva");
JMenuItem esci = new JMenuItem("Esci");
JTabbedPane pane = new JTabbedPane();
int tab = 0;
public Board(){
barra.add(file);
file.add(nuovo);
file.add(apri);
file.add(salva);
file.addSeparator();
file.add(esci);
setJMenuBar(barra);
add(pane);
pane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
Nuovo();
esci.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}});
nuovo.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
Nuovo();
}});
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void Nuovo(){
tab++;
pane.add("Tab"+tab,new JTextArea());
int selIndex = pane.getSelectedIndex();
selIndex = pane.getTabCount()-1;
pane.setSelectedIndex(selIndex);
}
}
Il problema sta qua
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 15/04/12 17:37
aaa
15/04/12 21:20
bububs
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
(non è una predica nè
)
Comunque sia, il problema si risolve come ti ho detto nei primi post, ovvero in questo modo molto semplice:
.....
public class Board extends JFrame{
JMenuBar barra = new JMenuBar();
JMenu file = new JMenu("File");
JMenuItem nuovo = new JMenuItem("Nuovo");
JMenuItem apri = new JMenuItem("Apri");
JMenuItem salva = new JMenuItem("Salva");
JMenuItem esci = new JMenuItem("Esci");
JTabbedPane pane = new JTabbedPane();
[b]Vector<JTextArea> aree = new Vector<JTextArea>();[/b]
int tab = 0;
......
e successivamente così:
......
public void Nuovo(){
tab++;
[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
[b]pane.add("Tab"+tab,aree.get(tab-1));[/b]
int selIndex = pane.getSelectedIndex();
selIndex = pane.getTabCount()-1;
pane.setSelectedIndex(selIndex);
}
......
L'ho provato e funziona perfettamente
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
Ultima modifica effettuata da bububs 15/04/12 21:22
aaa
16/04/12 17:35
jock
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..
package note;
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.Element;
public class Board extends JFrame{
JMenuBar barra = new JMenuBar();
JMenu file = new JMenu("File");
JMenu help = new JMenu("?");
JMenuItem nuovo = new JMenuItem("Nuovo",new ImageIcon("img/new.png"));
JMenuItem apri = new JMenuItem("Apri",new ImageIcon("img/open.png"));
JMenuItem salva = new JMenuItem("Salva",new ImageIcon("img/save.png"));
JMenuItem esci = new JMenuItem("Esci",new ImageIcon("img/exit.png"));
JMenuItem info = new JMenuItem("Info",new ImageIcon("img/info.png"));
JTabbedPane pane = new JTabbedPane();
int tab = 0;
int select = 0;
Vector<JTextArea> line = new Vector<JTextArea>();
Vector<JTextArea> aree = new Vector<JTextArea>();
Vector<JScrollPane> jsp = new Vector<JScrollPane>();
public Board(){
barra.add(file);
file.add(nuovo);
file.add(apri);
file.add(salva);
file.addSeparator();
file.add(esci);
setJMenuBar(barra);
add(pane);
pane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
Nuovo();
Linee();
esci.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}});
nuovo.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
Nuovo();
}});
apri.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
Apri();
}});
salva.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
Save();
}});
pane.addChangeListener(new ChangeListener(){
public void stateChanged(ChangeEvent e){
select = pane.getSelectedIndex();
aree.get(select).requestFocusInWindow();
Linee();
}});
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void Linee(){
aree.get(select).getDocument().addDocumentListener(new DocumentListener(){
public String getText(){
int caretPosition = aree.get(select).getDocument().getLength();
Element root = aree.get(select).getDocument().getDefaultRootElement();
String text = "1" + System.getProperty("line.separator");
for(int i = 2; i < root.getElementIndex( caretPosition ) + 2; i++){
text += i + System.getProperty("line.separator");
}
return text;
}
@Override
public void changedUpdate(DocumentEvent de){
line.get(select).setText(getText());
}
@Override
public void insertUpdate(DocumentEvent de){
line.get(select).setText(getText());
}
@Override
public void removeUpdate(DocumentEvent de){
line.get(select).setText(getText());
}});
}
public void Nuovo(){
tab++;
line.add(new JTextArea("1"));
line.get(tab-1).setBackground(Color.LIGHT_GRAY);
line.get(tab-1).setEditable(false);
aree.add(new JTextArea());
jsp.add(new JScrollPane());
jsp.get(tab-1).getViewport().add(aree.get(tab-1));
jsp.get(tab-1).setRowHeaderView(line.get(tab-1));
jsp.get(tab-1).setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
pane.add("Tab"+(tab),jsp.get(tab-1));
int selIndex = pane.getSelectedIndex();
selIndex = pane.getTabCount()-1;
pane.setSelectedIndex(selIndex);
}
public void Apri(){
try{
JFileChooser fileChooser = new JFileChooser();
int n = fileChooser.showOpenDialog(this);
if(n == JFileChooser.APPROVE_OPTION){
File f = fileChooser.getSelectedFile();
Reader r = new FileReader(f);
tab++;
line.add(new JTextArea("1"));
line.get(tab-1).setBackground(Color.LIGHT_GRAY);
line.get(tab-1).setEditable(false);
aree.add(new JTextArea(""+(tab-1)));
aree.get(tab-1).read(r,null);
jsp.add(new JScrollPane());
jsp.get(tab-1).getViewport().add(aree.get(tab-1));
jsp.get(tab-1).setRowHeaderView(line.get(tab-1));
jsp.get(tab-1).setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
pane.add(f.getName(),jsp.get(tab-1));
int selIndex = pane.getSelectedIndex();
selIndex = pane.getTabCount()-1;
pane.setSelectedIndex(selIndex);
}}catch(Exception ex){}
}
public void Save(){
try{
JFileChooser fileChooser = new JFileChooser();
int n = fileChooser.showSaveDialog(this);
if(n == JFileChooser.APPROVE_OPTION) {
File f = fileChooser.getSelectedFile();
BufferedWriter write = new BufferedWriter(new FileWriter(f));
write.append(aree.get(select).getText());
write.flush();
write.close();
}}catch(Exception ex){}
}
}
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 16/04/12 17:40
aaa