如何通过按钮或者其他组件的动作事件,来获取包含此事件源的的容器呢?(JFrame/JPanel等)

Neo爱吃海苔 2016-07-26 05:27:19
在实现类似俄罗斯小游戏的菜单中,要根据不同的菜单选项(MenuItem),弹出不同的对话框(JDialog)。

如果在弹出的对话框的动作事件里,要获取前一个主窗体(JFrame)中的一个线程对象并让其暂停,似乎做不到?

部分代码如下(省略部分,只保留关键部分):

public class TetrisJFrame extends JFrame implements ActionListener,ItemListener{ //主类是一个JFrame,包含一个JPanel(线程对象)
JMenuBar menuBar;
TetrisJPanel gameJPanel; //中间游戏面板
JPanel hitJPanel; //左侧提示面板
JPanel controlJPanel; //右侧操作面板

public TetrisJFrame (){
/*.....
菜单设计部分省略
.....*/
gameJPanel.setPreferredSize(new Dimension(400, 580)); //设置面板大小方式
gameJPanel.setBorder(BorderFactory.createMatteBorder(20, 20, 20, 20, Color.gray)); //边界
Dimension dimension=new Dimension(260,580);
hitJPanel.setPreferredSize(dimension);
hitJPanel.setBackground(Color.red);
controlJPanel.setPreferredSize(dimension);
controlJPanel.setBackground(Color.blue);

this.setLayout(new FlowLayout()); //JFrame默认是Border边界布局
Container con =this.getContentPane(); //获取一个容器
con.add(hitJPanel);
con.add(gameJPanel);
con.add(controlJPanel);

//给当前的窗体对象注册键盘监听器,监听者为gameJPanel
this.addKeyListener(gameJPanel);
//开始线程
Thread t = new Thread(gameJPanel);
t.start();
}
public static void main(String[] args) {
TetrisJFrame f = new TetrisJFrame();
f.setSize(960,650);
f.setVisible(true);
f.setLocationRelativeTo(null); //屏幕中央
f.setResizable(false);
f.setDefaultCloseOperation(EXIT_ON_CLOSE); //关闭窗口直接退出
}
@Override
public void actionPerformed(ActionEvent e) { //通过菜单项调整方块下落速度
// TODO Auto-generated method stub
String actionCommand=e.getActionCommand();
switch (actionCommand) {
case "慢(S)": //如果点击了一个菜单项,就响应此事件,我想让原来frame中线程对象暂停?
TetrisJPanel.flashTime=500;
TetrisJPanel.curFlashTime=500;
//System.out.println(this.getName()); //此处调试输出:frame0
//如下就会报错
try {
this.gameJPanel.wait();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
//e1.printStackTrace();
System.out.println("11112");
}
break;





所以请大家看一看,探讨一下嘛?
...全文
86 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧