【发布时间】:2013-10-31 14:04:32
【问题描述】:
我被困住了。我有一个 JFrame,在单击 JButton 时,它会启动另一个 JFrame 中的 JApplet。我想知道的是如何在单击 JApplet 中的“退出”JButton 时关闭 JApplet 所在的 JFrame。
编辑:我将我的代码切分以表明我的意思。
import javax.swing.JFrame;
public class Example {
public static void main(String[] args) {
Menu frame = new Menu();
frame.setTitle("Menu");
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setResizable(false);
frame.setVisible(true);
}
}
.
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Menu extends JFrame{
private JButton jbt=new JButton("Applet");
public Menu(){
add(jbt);
ButtonListener listener=new ButtonListener();
jbt.addActionListener(listener);
}
public static void run(JApplet applet, int width, int height,String title){
JFrame myFrame = new JFrame();
myFrame.setTitle(title);
myFrame.getContentPane().add(applet);
myFrame.setSize(width, height);
myFrame.setResizable(true);
myFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
applet.init();
applet.start();
myFrame.setVisible(true);
}
class ButtonListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e){
if (e.getSource()==jbt)
{
run(new myApplet(),400,180,"Applet");
}
}
}
}
.
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class myApplet extends JApplet{
private JButton jbtExit=new JButton();
@Override
public void init(){
add(jbtExit);
jbtExit.addActionListener(new ButtonListener());
}
class ButtonListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e){
if (e.getSource()==jbtExit)
{
setVisible(false);
}
}
}
【问题讨论】:
-
Applet 没有嵌入到 JFrame 中,它们显示在网页上。所以我不明白你的设计或问题。
-
@camickr 虽然它们并不打算嵌入到 JFrames 中,但 applet 可以 嵌入。毕竟,无论是由网页加载,还是由模仿页面功能的框架加载,都没有太大区别(就小程序而言),但小程序在框架的 JVM 上运行。
-
对不起,我的意思是 JFrame 有一个 JApplet 作为内容。
-
我想我的评论是你为什么要设计这样的东西?你想做什么?通常,您将面板添加到框架中。是的,JApplet 只是一个组件,您为什么要使用它而不是面板?
-
我有一个任务,我必须编写一个在屏幕上显示菜单的 java 应用程序。从这个菜单中,我必须有一些按钮来调用某些小程序来显示用户界面。