2015-11-16 75 views
0

我用4个jbuttons, 做了一个jframe,并且一旦我输入一个特定的键,它就会删除jbutton和其他按钮。JBotton不会被删除

但是,当我删除jbutton时,它不会直接消失,但它确实如果我重新调整或最小化jframe窗口。

我的代码有问题吗? 或者可能是我的电脑有问题?

public class View extends JFrame { 
GamePanel _gamePanel; 
DataModel _dm; 
GameTile _tile1, _tile2, _tile3, _tile4; 
ArrayList<GameTile> _gameTileList; 

public View(DataModel dm) { 
    this._dm = dm; 

    _gamePanel = new GamePanel(); 

    _tile1 = new GameTile('a'); 
    _tile1.addKeyListener(new PressKeyHandler(this)); 
    _tile2 = new GameTile('b'); 
    _tile2.addKeyListener(new PressKeyHandler(this)); 
    _tile3 = new GameTile('c'); 
    _tile3.addKeyListener(new PressKeyHandler(this)); 
    _tile4 = new GameTile('d'); 
    _tile4.addKeyListener(new PressKeyHandler(this)); 

    _gameTileList = new ArrayList<GameTile>(); 

    this.setSize(300, 500); 
    this.setVisible(true); 

    _gamePanel.add(_tile1); 
    _gamePanel.add(_tile2); 
    _gamePanel.add(_tile3); 
    _gamePanel.add(_tile4); 

    // this.addKeyListener(new PressKeyHandler(this)); 

    this.add(_gamePanel); 

    // this.pack(); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    _dm.setView(this); 
} 

public GamePanel get_gamePanel() { 
    return _gamePanel; 
} 

public GameTile get_gameTile(char letter) { 
    GameTile tileToReturn = new GameTile(' '); 
    switch (letter) { 
    case 'a': 
     tileToReturn = _tile1; 
     break; 
    case 'b': 
     tileToReturn = _tile2; 
     break; 
    case 'c': 
     tileToReturn = _tile3; 
     break; 
    case 'd': 
     tileToReturn = _tile4; 
     break; 
    } 
    return tileToReturn; 
} 

public ArrayList<GameTile> get_gameTileList() { 
    return _gameTileList; 
} 

public void set_gameTileList(ArrayList<GameTile> _gameTileList) { 
    this._gameTileList = _gameTileList; 
} 

public void removeTile(JPanel panel) { 
} 

public void update() { 
    _gamePanel.remove(_gameTileList.get(0)); 
    // _gameTileList.get(0).setText(" "); 
    // _gameTileList.get(0).setBackground(Color.BLACK); 
    emptyTile(_gameTileList.get(0)); 

    _gamePanel.add(_gameTileList.get(0), 0); 

    _gameTileList.remove(0); 
} 

public void emptyTile(GameTile tile) { 
    tile.setText(" "); 
    tile.setBorder(BorderFactory.createEmptyBorder()); 
    tile.setBackground(Color.BLACK); 

} 
} 


public class PressKeyHandler implements KeyListener { 
View _view; 

public PressKeyHandler(View view) { 
    this._view = view; 
} 

@Override 
public void keyTyped(KeyEvent e) { 

    switch (e.getKeyChar()) { 
    case 'a': 
     _view.get_gameTileList().add(_view.get_gameTile('a')); 
     _view.update(); 
     break; 
    case 'b': 
     _view.get_gameTileList().add(_view.get_gameTile('b')); 
     _view.update(); 
     break; 
    case 'c': 
     _view.get_gameTileList().add(_view.get_gameTile('c')); 
     _view.update(); 
     break; 
    case 'd': 
     _view.get_gameTileList().add(_view.get_gameTile('d')); 
     _view.update(); 
     break; 
    default: 
     System.out.println("no tiles for tyeped letterl"); 
    } 
} 

@Override 
public void keyPressed(KeyEvent e) { 
    // TODO Auto-generated method stub 
} 

@Override 
public void keyReleased(KeyEvent e) { 
    // TODO Auto-generated method stub 
} 
} 
+0

我们有一个编程挑战。但是还有任何代码? – Coffee

+0

可以显示错误吗? – Coffee

+0

我添加了我的代码。 – Javarian

回答

0

我只是一个新手,但你尝试把frame.pack();你在哪里取下按钮?几天前,我遇到类似的问题,在我放大框架之前,按钮不会显示出来。然后我添加frame.pack();我添加了按钮,并自动调整大小。

+0

我是否仍然需要使用frame.pack(),尽管我设置了frame的大小? – Javarian

+0

我认为你应该尝试一下。并在frame.pack(); “框架”是我的框架的名称。所以我认为你会使用“无论你的框架的名称是什么”.pack(); –