2010-06-16 6 views
0
public class JFrameWithPanel extends JFrame implements ActionListener, ItemListener 
{ 
    int packageIndex; 
    double price; 
    double[] prices = {49.99, 39.99, 34.99, 99.99}; 

    DecimalFormat money = new DecimalFormat("$0.00"); 
    JLabel priceLabel = new JLabel("Total Price: "+price); 
    JButton button = new JButton("Check Price"); 
    JComboBox packageChoice = new JComboBox(); 
    JPanel pane = new JPanel(); 
    TextField text = new TextField(5); 
    JButton accept = new JButton("Accept"); 
    JButton decline = new JButton("Decline"); 
    JCheckBox serviceTerms = new JCheckBox("I Agree to the Terms of Service.", false); 
    JTextArea termsOfService = new JTextArea("This is a text area", 5, 10); 

    public JFrameWithPanel() 
    { 
     super("JFrame with Panel"); 

     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     pane.add(packageChoice); 
     setContentPane(pane); 
     setSize(250,250); 
     setVisible(true); 

     packageChoice.addItem("A+ Certification"); 
     packageChoice.addItem("Network+ Certification "); 
     packageChoice.addItem("Security+ Certifictation"); 
     packageChoice.addItem("CIT Full Test Package"); 

     pane.add(button); 
     button.addActionListener(this); 

     pane.add(text); 
     text.setEditable(false); 
     text.setBackground(Color.WHITE); 
     text.addActionListener(this); 

     pane.add(termsOfService); 
     termsOfService.setEditable(false); 
     termsOfService.setBackground(Color.lightGray); 

     pane.add(serviceTerms); 
     serviceTerms.addItemListener(this); 

     pane.add(accept); 
     accept.addActionListener(this); 

     pane.add(decline); 
     decline.addActionListener(this); 
    } 

    public void actionPerformed(ActionEvent e) 
    { 
     packageIndex = packageChoice.getSelectedIndex(); 
     price = prices[packageIndex]; 
     text.setText("$"+price); 

     Object source = e.getSource(); 

     if(source == accept) 
     { 
      if(serviceTerms.isSelected() == false) 
      { 
       JOptionPane.showMessageDialog(null,"Please accept the terms of service.", "Terms of Service", JOptionPane.ERROR_MESSAGE); 
      } 
      else 
      { 
       JOptionPane.showMessageDialog(null,"Thank you. We will now move on to registering your product."); 
       pane.dispose(); 
      } 
     } 
     else if(source == decline) 
     { 
      System.exit(0); 
     } 
    } 

    public void itemStateChanged(ItemEvent e) 
    { 
     int select = e.getStateChange(); 
    } 

    public static void main(String[] args) 
    { 
     String value1; 
     int constant = 1, invalidNum = 0, answerParse, packNum, packPrice; 

     JOptionPane.showMessageDialog(null,"Hello!"+"\nWelcome to the CIT Test Program."); 

     JOptionPane.showMessageDialog(null,"IT WORKS!"); 
    } 



}//class 

Comment fermer ce cadre pour que mes boîtes de dialogue de message JOptionPane puissent continuer dans le programme sans quitter complètement le programme.Comment fermer une JFrame au milieu d'un programme

EDIT: J'ai essayé .Dispose() mais je reçois ceci:

cannot find symbol 
symbol : method dispose() 
location: class javax.swing.JPanel 
       pane.dispose(); 
        ^

Répondre

0

Essayez: this.dispose() à la place.

JPanel n'a pas cette méthode, mais JFrame-t

modifier

Dans votre principale, vous n'êtes pas d'appeler votre Cadre:

public static void main(String[] args) { 
    String value1; 
    int constant = 1, invalidNum = 0, answerParse, packNum, packPrice; 

    JOptionPane.showMessageDialog(null,"Hello!"+"\nWelcome to the CIT Test Program."); 

    JOptionPane.showMessageDialog(null,"IT WORKS!"); 
    } 

Essayez d'ajouter et voir la différence :

public static void main(String[] args) { 
    String value1; 
    int constant = 1, invalidNum = 0, answerParse, packNum, packPrice; 

    JOptionPane.showMessageDialog(null,"Hello!"+"\nWelcome to the CIT Test Program."); 

    JOptionPane.showMessageDialog(null,"IT WORKS!"); 
    new JFrameWithPanel(); //<-- creating a JFrameWithPanel 
} 

Également dans la méthode d'action effectuée, vous affichez la boîte de dialogue et ensuite vous vous débarrassez, probablement vous voulez le faire dans l'autre sens.

if(serviceTerms.isSelected() == false) { 
    JOptionPane.showMessageDialog(null,"Please accept the terms of service.", "Terms of Service", JOptionPane.ERROR_MESSAGE); 
} else { 
    this.dispose(); 
    JOptionPane.showMessageDialog(null,"Thank you. We will now move on to registering your product."); 
} 

Résultat dans:

main http://img194.imageshack.us/img194/7038/capturadepantalla201006x.png

Suivi par

result http://img85.imageshack.us/img85/8513/capturadepantalla201006l.png

modifier 2

Essayez le code suivant, il devrait sho w un cadre, et quand vous cliquez sur le bouton "fermer", il devrait afficher une boîte de dialogue, c'est ce que vous cherchez?

import javax.swing.*; 
import java.awt.event.*; 

class FrameDemo { 
    public static void main(String [] args) { 
     final JFrame frame = new JFrame("Main frame"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(new JPanel(){{ 
      add(new JLabel("This is the main content")); 
      add(new JButton("Close"){{ 
       addActionListener(new ActionListener(){ 
        public void actionPerformed(ActionEvent e) { 
         frame.dispose(); 
         JOptionPane.showMessageDialog(frame,"IT WORKS!"); 

        } 
       }); 
      }}); 
     }}); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 

    } 
} 
+0

C'est quelque chose de complètement différent. Dans votre méthode principale vous n'appelez même pas votre 'JFrameWithPanel' Essayez d'ajouter:' new JFrameWithPanel(); 'dans la dernière ligne de la méthode' main' et voyez la différence – OscarRyz

+0

Oui, c'est exactement ce que fait, voir ma mise à jour . Cliquer sur Accepter affiche le dialogue "Merci". – OscarRyz

+0

Les deux premiers? Bienvenue sur CIT et IT WORKS? Probablement vous avez juste les supprimer. – OscarRyz

-1

Je pense que cela pourrait être votre problème:

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

Cela provoque l'application à quitter lorsque vous fermez le cadre.

Vous pouvez essayer:

setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); 

et remplacer le dispose() appel avec:

setVisible(false) 
0

Je sais que cela peut être une réponse stupide, mais parfois est la chose la plus évidente sont à l'origine des problèmes. Je ne vous ai pas vu importer javax.swing dans votre code ... Avez-vous fait ça?

+0

cela aurait probablement dû être un commentaire – Linger

Questions connexes