Sto implementando un editor di testo con il quale mediante l'uso di una barra degli strumenti vorrei permettere ad un utente di:
- modificare il tipo del carattere;
- modificare la grandezza del carattere;
- rendere il testo in grassetto e/o corsivo e/o sottolineato;
- allineare il testo a sinistra, centro o a destra.
Preciso che per quanto riguarda i primi 3 punti sono riuscito ad implementarli solo che non riesco a far combaciare contemporaneamente gli eventi, cioè ad esempio se il testo è in grassetto e lo voglio far diventare grassetto-corsivo, quando clicco sul pulsante del corsivo ci diventa ma perde l'aspetto del grassetto. Per quanto riguarda l'allineamento del testo sul libro che mi hanno prestato non ho trovato riferimenti in merito.
Inoltre risulterebbe utile che le modifiche venghino applicate anche ad una sola parte del testo ovvero una parte evidenziata od a partire dal punto in cui si trova il cursore del testo.
Per comodità non riporto l'intero codice del programma ma solo la parte interessata:
codice:
//CASELLA COMBINATA PER LA GRANDEZZA DEL TESTO
sizeCombo = new JComboBox();
//disabilita la modifica da parte dell'utente
sizeCombo .setEditable(true);
//aggiunge voci alla casella
sizeCombo.addItem("8");
sizeCombo.addItem("10");
sizeCombo.addItem("12");
sizeCombo.addItem("14");
sizeCombo.addItem("16");
// rilevatore di eventi della casella combinata cambia il carattere del testo con quello selezionato
sizeCombo.addActionListener(new
ActionListener(){
public void actionPerformed(ActionEvent event){
fontSize = Integer.parseInt((String)sizeCombo.getSelectedItem());
font = new Font(fontFace, fontStyle, fontSize);
textArea.setFont(font);
textArea.repaint();
}//actionPerformed
});
//CASELLA COMBINATA PER I TIPI DI CARATTERE
faceCombo = new JComboBox();
//disabilita la modifica da parte dell'utente
faceCombo .setEditable(false);
//aggiunge voci alla casella
faceCombo.addItem("Serif");
faceCombo.addItem("SansSerif");
faceCombo.addItem("Monospaced");
faceCombo.addItem("Dialog");
faceCombo.addItem("DialogInput");
// rilevatore di eventi della casella combinata cambia il carattere del testo con quello selezionato
faceCombo.addActionListener( new
ActionListener(){
public void actionPerformed(ActionEvent event){
fontFace = (String)faceCombo.getSelectedItem();
font = new Font(fontFace, fontStyle, fontSize);
textArea.setFont(font);
textArea.repaint();
}//actionPerformed
});
Action alignLeftAction = new
AbstractAction("Align on the left", new ImageIcon("left.gif")){
public void actionPerformed(ActionEvent event){
textArea.setText("Allinea il testo a sinistra");
}//actionPerformed
};//AbstractAction
Action alignCenterAction = new
AbstractAction("Align to the center", new ImageIcon("center.gif")){
public void actionPerformed(ActionEvent event){
textArea.setText("Allinea il testo al centro");
}//actionPerformed
};//AbstractAction
Action alignRightAction = new
AbstractAction("Align on the right", new ImageIcon("right.gif")){
public void actionPerformed(ActionEvent event){
textArea.setText("Allinea il testo a destra");
}//actionPerformed
};//AbstractAction
JButton boldButton = new JButton(new ImageIcon("bold.gif"));
boldButton.addActionListener(new
ActionListener(){
public void actionPerformed(ActionEvent event){
fontStyle = Font.BOLD;
font = new Font(fontFace, fontStyle, fontSize);
textArea.setFont(font);
textArea.repaint();
}//actionPerformed
});
JButton italicButton = new JButton(new ImageIcon("italic.gif"));
italicButton.addActionListener(new
ActionListener(){
public void actionPerformed(ActionEvent event){
fontStyle = Font.ITALIC;
font = new Font(fontFace, fontStyle, fontSize);
textArea.setFont(font);
textArea.repaint();
}//actionPerformed
});
JButton underlineButton = new JButton(new ImageIcon("underline.gif"));
underlineButton.addActionListener(new
ActionListener(){
public void actionPerformed(ActionEvent event){
textArea.setText("Sottolinea il testo");
}//actionPerformed
});