PDA

View Full Version : [Java]Problema Interfaccia grafica


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);

sottovento
28-04-2015, 09:51
Il codice che hai postato non e' nemmeno compilabile, anzi non e' nemmeno completo.

Forse potresti renderlo almeno compilabile, cosi' che si possa lanciare ed avere un'idea di cosa hai fatto e di cosa vorresti ottenere, semplificando il lavoro di chi vorrebbe aiutarti....