我做了一个Restart的JComboBox,点了以后会再调一遍init函数重新生成新的雷区。
函数如下:  private void init()
{
container=getContentPane();
container.setLayout(new BorderLayout());


labelPanel = new JPanel();
labelPanel.setLayout( new FlowLayout() ); remainingMines = new JLabel ( "Mines remaining: "+ minenum);
select=new JComboBox(names);
//select.setMaximumRowCount(6);
labelPanel.add( select );
        labelPanel.add( remainingMines );
        container.add( BorderLayout.NORTH, labelPanel );
        
buttonPanel = new JPanel();
buttonPanel.setLayout( new GridLayout(vandr,vandr) );

        mines= new MineButton [vandr+2][vandr+2];

flag=minenum;

for (i = 0; i < vandr+2; i++ ){
for(j = 0; j < vandr+2; j++ )
{
mines[i][j] = new MineButton();
//mines[i][j].setBackground(Color.yellow);
//mines[i][j].show();
}
}
for (i = 1; i < vandr+1; i++ ){
for(j = 1; j < vandr+1; j++ )
{
mines[i][j].sequence=i*vandr+j;
buttonPanel.add( mines[i][j] );
}
} container.add(BorderLayout.CENTER,buttonPanel); setSize (676,560);
setVisible (true);

for(int c=0;c<minenum;c++)
{
 Random random = new Random();
               int u=Math.abs(random.nextInt())%vandr+1;
               int v=Math.abs(random.nextInt())%vandr+1;
               if(mines[u][v].value!=1)
               {
       mines[u][v].value=1;
               }
     else if(mines[u][v].value==1) 
       {
        c--;
       }
}

for (i = 1; i < vandr+1; i++ ){
for(j = 1; j < vandr+1; j++ ){
if(mines[i-1][j-1].value==1)
mines[i][j].round++;
if(mines[i-1][j].value==1)
mines[i][j].round++;
if(mines[i-1][j+1].value==1)
mines[i][j].round++;
if(mines[i][j-1].value==1)
mines[i][j].round++;
if(mines[i][j+1].value==1)
mines[i][j].round++;
if(mines[i+1][j-1].value==1)
mines[i][j].round++;
if(mines[i+1][j].value==1)
mines[i][j].round++;
if(mines[i+1][j+1].value==1)
mines[i][j].round++;
}
}

ButtonHandler handlerbutton=new ButtonHandler();
select.addItemListener( new CheckBoxListener());

for ( i = 1; i < vandr+1; i++ ){
for( j = 1; j < vandr+1; j++ )
{
mines[i][j].addMouseListener(handlerbutton);
}
  }
this.doLayout();
repaint();
}这是我写的下拉菜单处理事件(我刚学Java,写的很烂)
private class CheckBoxListener   implements    ItemListener 
{
 public void itemStateChanged( ItemEvent event )
      {
 JComboBox JB=(JComboBox)event.getSource();
 if(event.getStateChange()==ItemEvent.SELECTED)
 {
 if(JB.getSelectedIndex()==1)
 {
 buttonPanel.removeAll(); 
 labelPanel.removeAll();
 //remove(buttonPanel);
 //remove(labelPanel);
 init();
 }
  if(JB.getSelectedIndex()==2)
 {
 buttonPanel.removeAll(); 
 labelPanel.removeAll();
 
 vandr=10;
 minenum=10;
 init();
 }
  if(JB.getSelectedIndex()==3)
 {
 buttonPanel.removeAll(); 
 labelPanel.removeAll(); 
 vandr=15;
 minenum=30;
 init();
 }
 if(JB.getSelectedIndex()==4)
 {
 buttonPanel.removeAll(); 
 labelPanel.removeAll(); 
 vandr=20;
 minenum=40;
 init();
 }
 if(JB.getSelectedIndex()==5)
 {
 buttonPanel.removeAll(); 
 labelPanel.removeAll(); 
 enter();
 init();
 }
 }
      }
}