在由面板触发的对话框里怎么实现对面板的重绘?请高手指点下
下面是我的代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class ExitDialog extends JDialog
{
public ExitDialog(JFrame MainFrame)
{
super(MainFrame,"you dead",true);
JButton again=new JButton("again");
JButton exit=new JButton("exit");
add(again,BorderLayout.WEST);
add(exit,BorderLayout.EAST);
again.addActionListener(new
ActionListener()
{
public void actionPerformed(ActionEvent event)
{
setVisible(false);
snake1=new SnakePanel();
snake1.repaint();
}
});
exit.addActionListener(new
ActionListener()
{
public void actionPerformed(ActionEvent event)
{
System.exit(0);
}
});
}
public SnakePanel snake1;
}我试过了,但就是重绘不了,还有说明一点,我面板里面用到了线程,不知道跟这个有没关系。。
下面是我的代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class ExitDialog extends JDialog
{
public ExitDialog(JFrame MainFrame)
{
super(MainFrame,"you dead",true);
JButton again=new JButton("again");
JButton exit=new JButton("exit");
add(again,BorderLayout.WEST);
add(exit,BorderLayout.EAST);
again.addActionListener(new
ActionListener()
{
public void actionPerformed(ActionEvent event)
{
setVisible(false);
snake1=new SnakePanel();
snake1.repaint();
}
});
exit.addActionListener(new
ActionListener()
{
public void actionPerformed(ActionEvent event)
{
System.exit(0);
}
});
}
public SnakePanel snake1;
}我试过了,但就是重绘不了,还有说明一点,我面板里面用到了线程,不知道跟这个有没关系。。
楼主【peiqu123】截止到2008-08-02 20:10:48的历史汇总数据(不包括此帖):
发帖的总数量:2 发帖的总分数:20 每贴平均分数:10
回帖的总数量:6 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:2 结贴的总分数:20
无满意结贴数:0 无满意结贴分:0
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满意结贴率:0.00 % 无满意结分率:0.00 %
敬礼!
取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=peiqu123
snake1.repaint();
===============
每响应一次就新建一个Panel?
一般来说没关系,不过你贴的代码中看不出线程在哪里,所以不好说啊,呵呵。
怎么在弹出的对话框里使线程终止并重新刷新面板,然后在让线程重新运行呢?
不过能否说仔细点,我是才开始学GUI。。我用的是JPANEL,
在主窗口中加入组件JPANEL。。至于在主窗体中提供一个用于重新创建一个绘制蛇的面板并重新创建线程的方法,能否说仔细点...
顺便问一下,在对话框的按钮“again”…中的监听器应该怎么写?谢谢啊!!!
import java.awt.event.*;
import javax.swing.event.*;
import javax.swing.*;
class MainFrame extends JFrame
{
public final static int DEFAULT_WIDTH=500;
public final static int DEFAULT_HEIGHT=500;
private ExitDialog dialog;
public MainFrame()
{
setDefaultLookAndFeelDecorated(true);
setTitle("crazy snake");
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
Toolkit kit=Toolkit.getDefaultToolkit();
Dimension screenSize=kit.getScreenSize();
int screenWidth=screenSize.width;
int screenHeight=screenSize.height;
this.setLocation(screenWidth/6, screenHeight/6);
//ChoosePanel choose=new ChoosePanel();
//add(choose);
//if(choose.getCol()==150)
//{
// choose.removeAll();
//setEnable();
//
SnakePanel gamePanel=new SnakePanel();
add(gamePanel);
pack();
}
}上面是主窗口的,下面是弹出的对话框:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class ExitDialog extends JDialog
{
public ExitDialog( final JFrame MainFrame)
{
super(MainFrame,"you dead",true);
JButton again=new JButton("again");
JButton exit=new JButton("exit");
add(again,BorderLayout.NORTH);
add(exit,BorderLayout.SOUTH);
again.addActionListener(new
ActionListener()
{
public void actionPerformed(ActionEvent event)
{
//这里要怎么补充的呢?
}
});
exit.addActionListener(new
ActionListener()
{
public void actionPerformed(ActionEvent event)
{
System.exit(0);
}
});
}
public SnakePanel snake1;
}
public void actionPerformed(ActionEvent event)
{
//这里要怎么补充的呢?
这里应该新建一个 SnakePanel 的对象并将其添加到主窗体中覆盖原有对象并重新开始线程
}
也就是说你应该将SnakePanel 做成一个可以添加到窗体中运行的面板,所有的按钮事件均在该面板类中进行处理,而主窗体只负责加载该面板,弹出的对话框只负责退出游戏和重新开始,建议你整理一下思路后再写写试试
菜单等响应事件来实现