Moltack
27-04-2015, 20:04
Salve a tutti ho finito di studiare da poco java e ora sto iniziando a studiare le interfacce grafiche.Volevo fare un piccolo programmino di quiz con domande e risposte.Il mio problema e questo:
-Creo la classe main che contiene la schermata iniziale di benvenuto e un pulsante che dovrebbe passare al panel successivo che contiene le domande.
-nel main creo il frame contenente un panel con al suo interno appunto il pulsante
-Creo un altra classe che contiene che la prima schermata di domande e risposte(Naturalmente questa classe e un panel)
il mio problema e che non so come far cambiare il panel che sta nel main con il panel che contiene le domande e risposte.Su internet consigliano il CardLayout e utilizzando quello non so come richiamare nel CardLayout la classe delle domande.
Se invece faccio tutto un codice,cioč creo un unico e grande codice nel main, e utilizzo il CardLayout il programma funziona.Secondo me il problema e cosa inserire actionPerformed
Scusate se non sono stato molto chiaro ma spero che avete capito.Ecco il codice delle 2 classi
CLASSE QUIZ(contenente il main)
public class Quiz extends JFrame{
private JFrame frame;
private Container contenitore;
private CardLayout cardlayout;
private JPanel panel;
private JPanel p1;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Quiz window = new Quiz();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public Quiz()
{
frame = new JFrame("Quiz");
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contenitore=frame.getContentPane();
contenitore.setVisible(true);
initialize();
}
private void initialize()
{
cardlayout=new CardLayout(); //Creazione CardLayout
panel = new JPanel(cardlayout); //Assegno al JPanel il
CardLayout
p1 = new JPanel();
panel.add(p1);
JLabel lblBenvenuto = new JLabel(" Benvenuto");
p1.add(lblBenvenuto);
panel.setBackground(Color.GREEN); //Imposto lo sfondo per
p1.setBackground(Color.BLUE); //capire quali panel sia
frame.setBackground(Color.MAGENTA); //stato aggiunto dopo il
//click del bottone
contenitore.add(panel);
bottone();
}
private void bottone()
{
JButton Bottone = new JButton("Clicca per iniziare");
p1.add(Bottone);
Bottone.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e)
{
panel.remove(p1);
PaginaQuiz paginaQuiz=new PaginaQuiz();
paginaQuiz.setBounds(100, 100, 450, 300);
paginaQuiz.setBackground(Color.YELLOW);
panel.add(paginaQuiz);
panel.repaint();
contenitore.revalidate();
}
});
}
}
ClASSE PAGINEQUIZ
public class PaginaQuiz extends JPanel {
private JPanel contentPane;
private CardLayout cardLayout;
public PaginaQuiz()
{
initialize();
}
private void initialize() {
setBounds(100, 100, 450, 300);
JPanel panel = new JPanel();
SpringLayout sl_panel = new SpringLayout();
panel.setLayout(sl_panel);
//Creazione label per la Domanda
JLabel lblNewLabel = new JLabel("Domanda");
sl_panel.putConstraint(SpringLayout.NORTH, lblNewLabel, 36, SpringLayout.NORTH, panel);
panel.add(lblNewLabel);
//Creazione label per le Risposte
JButton btnRisposta = new JButton("risposta 1");
sl_panel.putConstraint(SpringLayout.WEST, lblNewLabel, 0, SpringLayout.WEST, btnRisposta);
btnRisposta.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//qui dovrei accedere a un altro panel se la
//risposta e errata o corretta
}
});
panel.add(btnRisposta);
-Creo la classe main che contiene la schermata iniziale di benvenuto e un pulsante che dovrebbe passare al panel successivo che contiene le domande.
-nel main creo il frame contenente un panel con al suo interno appunto il pulsante
-Creo un altra classe che contiene che la prima schermata di domande e risposte(Naturalmente questa classe e un panel)
il mio problema e che non so come far cambiare il panel che sta nel main con il panel che contiene le domande e risposte.Su internet consigliano il CardLayout e utilizzando quello non so come richiamare nel CardLayout la classe delle domande.
Se invece faccio tutto un codice,cioč creo un unico e grande codice nel main, e utilizzo il CardLayout il programma funziona.Secondo me il problema e cosa inserire actionPerformed
Scusate se non sono stato molto chiaro ma spero che avete capito.Ecco il codice delle 2 classi
CLASSE QUIZ(contenente il main)
public class Quiz extends JFrame{
private JFrame frame;
private Container contenitore;
private CardLayout cardlayout;
private JPanel panel;
private JPanel p1;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Quiz window = new Quiz();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public Quiz()
{
frame = new JFrame("Quiz");
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contenitore=frame.getContentPane();
contenitore.setVisible(true);
initialize();
}
private void initialize()
{
cardlayout=new CardLayout(); //Creazione CardLayout
panel = new JPanel(cardlayout); //Assegno al JPanel il
CardLayout
p1 = new JPanel();
panel.add(p1);
JLabel lblBenvenuto = new JLabel(" Benvenuto");
p1.add(lblBenvenuto);
panel.setBackground(Color.GREEN); //Imposto lo sfondo per
p1.setBackground(Color.BLUE); //capire quali panel sia
frame.setBackground(Color.MAGENTA); //stato aggiunto dopo il
//click del bottone
contenitore.add(panel);
bottone();
}
private void bottone()
{
JButton Bottone = new JButton("Clicca per iniziare");
p1.add(Bottone);
Bottone.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e)
{
panel.remove(p1);
PaginaQuiz paginaQuiz=new PaginaQuiz();
paginaQuiz.setBounds(100, 100, 450, 300);
paginaQuiz.setBackground(Color.YELLOW);
panel.add(paginaQuiz);
panel.repaint();
contenitore.revalidate();
}
});
}
}
ClASSE PAGINEQUIZ
public class PaginaQuiz extends JPanel {
private JPanel contentPane;
private CardLayout cardLayout;
public PaginaQuiz()
{
initialize();
}
private void initialize() {
setBounds(100, 100, 450, 300);
JPanel panel = new JPanel();
SpringLayout sl_panel = new SpringLayout();
panel.setLayout(sl_panel);
//Creazione label per la Domanda
JLabel lblNewLabel = new JLabel("Domanda");
sl_panel.putConstraint(SpringLayout.NORTH, lblNewLabel, 36, SpringLayout.NORTH, panel);
panel.add(lblNewLabel);
//Creazione label per le Risposte
JButton btnRisposta = new JButton("risposta 1");
sl_panel.putConstraint(SpringLayout.WEST, lblNewLabel, 0, SpringLayout.WEST, btnRisposta);
btnRisposta.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//qui dovrei accedere a un altro panel se la
//risposta e errata o corretta
}
});
panel.add(btnRisposta);