有一个既是applet又是application的java程序,当作为application运行时,点击windows窗口的X时,并不能关闭程序,而只能关闭进程,添加什么语句可以使用windows的X关闭程序呢?代码如下:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2006</p>
 * <p>Company: </p>
 * @author not attributable
 * @version 1.0
 */public class Applet1 extends Applet {
  private boolean isStandalone = false;
  JTabbedPane stradacTab = new JTabbedPane();
  JPanel jPanel1 = new JPanel();
  JPanel jPanel2 = new JPanel();
  JScrollPane jScrollPane1 = new JScrollPane();
  JTextField jTextField1 = new JTextField();
  JComboBox jComboBox1 = new JComboBox();
  JTextPane jTextPane1 = new JTextPane();
  JButton jButton1 = new JButton();
  JTextArea jTextArea1 = new JTextArea();
  JToggleButton jToggleButton1 = new JToggleButton();
  JButton jButton2 = new JButton();
  JTextArea jTextArea2 = new JTextArea();
  JEditorPane jEditorPane1 = new JEditorPane();//Get a parameter value
  public String getParameter(String key, String def) {
    return isStandalone ? System.getProperty(key, def) :
        (getParameter(key) != null ? getParameter(key) : def);
  }//Construct the applet
  public Applet1() {
  }//Initialize the applet
  public void init() {
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }//Component initialization
  private void jbInit() throws Exception {
    this.setLayout(null);
    stradacTab.setBounds(new Rectangle(40, 18, 317, 260));
    jPanel1.setBounds(new Rectangle(6, 51, 31, 52));
    jPanel1.setLayout(null);
    jPanel2.setBounds(new Rectangle(1, 129, 38, 87));
    jButton1.setBounds(new Rectangle(56, 143, 93, 47));
    jButton1.setText("jButton1");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        jButton1_actionPerformed(e);
      }
    });    jButton2.setText("jButton2");
    jButton2.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        jButton2_actionPerformed(e);
      }
    });
    jPanel1.add(jButton1, null);
    jPanel2.add(jButton2, null);    this.add(stradacTab, null);
    stradacTab.add("druhy",jPanel2);
    stradacTab.add("prvni",jPanel1);
    stradacTab.addChangeListener(new ChangeListener() {
      public void stateChanged(ChangeEvent e) {
        int index = stradacTab.getSelectedIndex();
        String title = stradacTab.getTitleAt(index);
        System.out.println("index = " +
                           index);
        System.out.println("title = " +
                           title);
      }
    });  }//Start the applet
  public void start() {
  }//Stop the applet
  public void stop() {
  }//Destroy the applet
  public void destroy() {
  }//Get Applet information
  public String getAppletInfo() {
    return "Applet Information";
  }//Get parameter info
  public String[][] getParameterInfo() {
    return null;
  }//Main method
  public static void main(String[] args) {
    Applet1 applet = new Applet1();
    applet.isStandalone = true;
    Frame frame;
    frame = new Frame();
    frame.setTitle("Applet Frame");
    frame.add(applet, BorderLayout.CENTER);
    applet.init();
    applet.start();
    frame.setSize(400,320);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    frame.setLocation((d.width - frame.getSize().width) / 2, (d.height - frame.getSize().height) / 2);
    frame.setVisible(true);
  }  void jButton2_actionPerformed(ActionEvent e) {
    stradacTab.setSelectedIndex(1);
  }  void jButton1_actionPerformed(ActionEvent e) {
    stradacTab.setSelectedIndex(0);
  }}

解决方案 »

  1.   

    你的思路是错的即时Applet又是Application的程序需要两个底层容器。一个是JFrame,一个是JApplet
    当通过main函数来启动的时候,通过JFrame来显示,通过页面启动时用JApplet来启动
    也就是说你需要一个自己的容器JPanel,把所有的界面放到这个JPanel里面,然后需要的时候把这个JPanel放到JFrame里或者JApplet里
    不知道你明白我的意思没。就界面程序本身来说,他既不是Applet,也不是Frame,只是一个panel,只不过需要通过什么方式显示,就让什么作为他的容器就ok了
      

  2.   

    我理解一下,可以我现在首先想知道,如何关闭这个程序,点击Windows的X按钮没作用,您知道如何获取windows的点击X按钮的消息吗?
      

  3.   

    使用JFrame:import java.awt.*;
    import java.awt.event.*;
    import java.applet.*;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.JFrame;/**
     * <p>Title: </p>
     * <p>Description: </p>
     * <p>Copyright: Copyright (c) 2006</p>
     * <p>Company: </p>
     * @author not attributable
     * @version 1.0
     */public class Applet1 extends Applet {
      private boolean isStandalone = false;
      JTabbedPane stradacTab = new JTabbedPane();
      JPanel jPanel1 = new JPanel();
      JPanel jPanel2 = new JPanel();
      JScrollPane jScrollPane1 = new JScrollPane();
      JTextField jTextField1 = new JTextField();
      JComboBox jComboBox1 = new JComboBox();
      JTextPane jTextPane1 = new JTextPane();
      JButton jButton1 = new JButton();
      JTextArea jTextArea1 = new JTextArea();
      JToggleButton jToggleButton1 = new JToggleButton();
      JButton jButton2 = new JButton();
      JTextArea jTextArea2 = new JTextArea();
      JEditorPane jEditorPane1 = new JEditorPane();//Get a parameter value
      public String getParameter(String key, String def) {
        return isStandalone ? System.getProperty(key, def) :
            (getParameter(key) != null ? getParameter(key) : def);
      }//Construct the applet
      public Applet1() {
      }//Initialize the applet
      public void init() {
        try {
          jbInit();
        }
        catch(Exception e) {
          e.printStackTrace();
        }
      }//Component initialization
      private void jbInit() throws Exception {
        this.setLayout(null);
        stradacTab.setBounds(new Rectangle(40, 18, 317, 260));
        jPanel1.setBounds(new Rectangle(6, 51, 31, 52));
        jPanel1.setLayout(null);
        jPanel2.setBounds(new Rectangle(1, 129, 38, 87));
        jButton1.setBounds(new Rectangle(56, 143, 93, 47));
        jButton1.setText("jButton1");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
          public void actionPerformed(ActionEvent e) {
            jButton1_actionPerformed(e);
          }
        });    jButton2.setText("jButton2");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
          public void actionPerformed(ActionEvent e) {
            jButton2_actionPerformed(e);
          }
        });
        jPanel1.add(jButton1, null);
        jPanel2.add(jButton2, null);    this.add(stradacTab, null);
        stradacTab.add("druhy",jPanel2);
        stradacTab.add("prvni",jPanel1);
        stradacTab.addChangeListener(new ChangeListener() {
          public void stateChanged(ChangeEvent e) {
            int index = stradacTab.getSelectedIndex();
            String title = stradacTab.getTitleAt(index);
            System.out.println("index = " +
                               index);
            System.out.println("title = " +
                               title);
          }
        });  }
      protected void processWindowEvent(WindowEvent e) {
          System.out.print("hello");
          System.exit(0);
      }//Start the applet
      public void start() {
      }//Stop the applet
      public void stop() {
      }//Destroy the applet
      public void destroy() {
      }//Get Applet information
      public String getAppletInfo() {
        return "Applet Information";
      }//Get parameter info
      public String[][] getParameterInfo() {
        return null;
      }//Main method
      public static void main(String[] args) {
        Applet1 applet = new Applet1();
        applet.isStandalone = true;
        JFrame frame;
        frame = new JFrame();
        frame.setTitle("Applet Frame");
        frame.getContentPane().add(applet, BorderLayout.CENTER);
        applet.init();
        applet.start();
        frame.setSize(400,320);
        Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
        frame.setLocation((d.width - frame.getSize().width) / 2, (d.height - frame.getSize().height) / 2);
        frame.setVisible(true);
        //frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
      }  void jButton2_actionPerformed(ActionEvent e) {
        stradacTab.setSelectedIndex(1);
      }  void jButton1_actionPerformed(ActionEvent e) {
        stradacTab.setSelectedIndex(0);
      }}
      

  4.   

    好吧,只解决你退出问题
    JFrame f=new JFrame();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);