2010-06-16 48 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 

如何获取此框架以关闭,以便我的JOptionPane消息对话框可以在程序中继续,而无需完全退出程序。如何在程序中间关闭JFrame

编辑:我试过.dispose(),但我得到这个:

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

回答

0

尝试:this.dispose()代替。

JPanel没有这种方法,但JFrame确实

编辑

在你的主你不叫你的框架:

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!"); 
    } 

尝试增加它,看到了差距:

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 
} 

同样在执行操作的方法中,您正在显示对话框然后进行处理,可能您想以相反的方式进行处理。

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."); 
} 

导致:随后

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

编辑2

试试下面的代码

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

,应该翔w一个框架,当你点击“关闭”按钮时,它应该显示一个对话框,那是你在找什么?

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

这是完全不同的东西。在你的main方法中,你甚至不会调用你的'JFrameWithPanel'在'main'方法的最后一行尝试添加:'new JFrameWithPanel();'并且看到区别 – OscarRyz 2010-06-16 17:52:46

+0

是的,这正是我在做的事情。点击接受显示“谢谢你”对话框。 – OscarRyz 2010-06-16 17:59:06

+0

前两个?欢迎来到CIT和IT作品?可能你只是删除它们。 – OscarRyz 2010-06-16 18:02:01

-1

我认为这可能是你的问题:

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

这将导致应用程序时关闭框退出。

你可以尝试:

setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); 

,并更换dispose()电话:

setVisible(false) 
0

我知道这可能是一个愚蠢的答案,但有时最明显的一点的是问题的根源。我没有看到你在代码中导入javax.swing ...你有这样做吗?

+0

这可能应该是一个评论 – Linger 2012-11-04 16:55:00