View Full Version : [Java] Problema su interfaccia grafica
Groove89
15-09-2012, 10:50
Salve ragazzi avrei bisogno di due aiutini! :)
1)
Ho una finestra1 con dei bottoni. Alla pressione di un bottone deve aprirsi
un'altra finestra2. Quando chiudo finestra2 come posso evitare di
far chiudere finestra1? Deve chiudersi solo finestra2! :mc:
Aggiornamento: ho risolto con this.getDefaultCloseOperation(DISPOSE_ON_CLOSE) nella finestra2.
Aggiornamento_2: Se però dentro la finestra2 associo un ascoltatore ad un pulsante "chiudi" per chiudere la finestra, cosa
posso fare in questo caso? Perché se nell'ascoltatore ci metto System.exit(0) si chiude tutto il programma..
Aggiornamento_3: Ho risolto con this.dispose();
2) In questa seconda finestra dovrei far visualizzare del testo, formattato, con barra laterale a scorrimento. Il testo è lungo, sono delle regole di un gioco. Io ho creato una JScrollPane ed una JTextArea ed ho aggiunto la JTextArea al JScrollPane. Il problema è far visualizzare il testo bello formattato. Come si potrebbe fare? Grazie :)
[Kendall]
15-09-2012, 13:51
Salve ragazzi avrei bisogno di due aiutini! :)
1)
Ho una finestra1 con dei bottoni. Alla pressione di un bottone deve aprirsi
un'altra finestra2. Quando chiudo finestra2 come posso evitare di
far chiudere finestra1? Deve chiudersi solo finestra2! :mc:
Aggiornamento: ho risolto con this.getDefaultCloseOperation(DISPOSE_ON_CLOSE) nella finestra2.
Aggiornamento_2: Se però dentro la finestra2 associo un ascoltatore ad un pulsante "chiudi" per chiudere la finestra, cosa
posso fare in questo caso? Perché se nell'ascoltatore ci metto System.exit(0) si chiude tutto il programma..
Aggiornamento_3: Ho risolto con this.dispose();
2) In questa seconda finestra dovrei far visualizzare del testo, formattato, con barra laterale a scorrimento. Il testo è lungo, sono delle regole di un gioco. Io ho creato una JScrollPane ed una JTextArea ed ho aggiunto la JTextArea al JScrollPane. Il problema è far visualizzare il testo bello formattato. Come si potrebbe fare? Grazie :)
Che tipo di formattazione vuoi ottenere?
Se non erro il JTextArea è un componente che gestisce solo plain text, quindi niente formattazioni particolari o tutte le chicche di un rich text. Per quello prova a dare un'occhiata al JEditorPane.
Groove89
15-09-2012, 18:46
Allora ho provato a fare qualcosa:
package gui;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ScrollPaneLayout;
public class Regole extends JFrame implements ActionListener
{
private MyPanel pannello; //pannello principale con sfondo
private JPanel pannelloInferiore; //contiene i bottoni
private JTextArea areaTesto; //area di testo
private JScrollPane scroll; //scroller per area di testo
private JButton indietro;
private final String urlSfondo = "images/sfondoPrincipale2.jpg";
public Regole(String titolo) {
super(titolo);
Container c = this.getContentPane();
pannello = new MyPanel(urlSfondo);
pannello.setLayout(new BorderLayout());
c.add(pannello);
areaTesto = new JTextArea();
areaTesto.setEditable(false);
areaTesto.setLineWrap(true); //a capo automatico
scroll = new JScrollPane(areaTesto);
scroll.setPreferredSize(new Dimension(480,630));
scroll.setLayout(new ScrollPaneLayout());
pannello.add(scroll, BorderLayout.NORTH);
String testo;
testo = setTesto();
areaTesto.setText(testo);
indietro = new JButton("Indietro");
indietro.addActionListener(this);
pannelloInferiore = new JPanel(new FlowLayout());
pannelloInferiore.setOpaque(false);
pannelloInferiore.add(indietro);
pannello.add(pannelloInferiore, BorderLayout.SOUTH);
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
int screenWidth = (int) screen.getWidth(); //altezza schermo
int screenHeight = (int) screen.getHeight(); //larghezza schermo
int x = (screenWidth/2)-(500/2); //coordinata x del punto
int y = (screenHeight/2)-(700/2); //coordinata y del punto
this.setLocation(x, y);
this.setSize(500,700);
this.setVisible(true);
this.setResizable(false);
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if(source.equals(indietro)) {
this.dispose();
}
}
private String setTesto() {
String text = "";
String filename = "regole.txt";
try {
FileReader fr = new FileReader(filename);
BufferedReader br = new BufferedReader(fr); //-> Creo il canale di lettura
String line;
while ((line=br.readLine())!=null) { //-> Finchè non c'è più niente da leggere
text = text + line;
}
br.close(); //-> Chiudo il canale di lettura
}
catch(FileNotFoundException e) {
return("Impossibile trovare il file " + filename + ".");
}
catch(IOException e) {
return("Impossibile caricare il file " + filename + ".");
}
return text;
}
}
In sostanza ad una String associo il contenuto di un .txt (che contiene le regole) e la setto come testo dell'area. Il problema è che la formattazione all'interno del .txt sparisce. Esce una cosa abbastanza schifosa..
sottovento
16-09-2012, 09:42
<cut>
In sostanza ad una String associo il contenuto di un .txt (che contiene le regole) e la setto come testo dell'area. Il problema è che la formattazione all'interno del .txt sparisce. Esce una cosa abbastanza schifosa..
[Kendall] ti ha dato un ottimo suggerimento. JEditorPane e' il componente che fa per te. Poi, invece del .txt puoi creare un .html cosi' da formattare come vuoi, decidere stili dei font, colori ed inserire immagini in maniera estremamente semplice
Groove89
16-09-2012, 09:56
Va bene, perfetto, grazie :D Ci provo, se ho problemi (spero di no) tornerò ahah
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.