2017-11-05 4 views
-1

私は画面を持つSwingで簡単なゲームを作成しました。セルをクリックすると、隣接する2つのセルの色が変化します。これは、このコードによって達成される:Iが戻される二つの画面と元画面との間で切り替えることのsetVisible(boolean)メソッドを使用するとSwingでsetVisible(boolean)を使用して画面を切り替える

 public class SelfGrid extends BattleGrid { 
     @Override 
    protected JPanel getCell() 
    { 
    JPanel panel = new JPanel(); 
    panel.setBackground(Color.black); 
    panel.setBorder(BorderFactory.createLineBorder(Color.blue, 1)); 

    panel.setPreferredSize(new Dimension(20, 20)); 


     panel.addMouseListener(new MouseAdapter() { 
     public void mouseReleased(MouseEvent e) 
      { 

     panel.setSize(new Dimension(20,80)); 
     panel.setBackground(Color.orange); 
     } 
    } 
    }); 

    return panel; 
     } 
    } 

    public abstract class Battle extends JPanel { 
    public BattleGrid() { 
    this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); 
    JPanel grid = new JPanel(); 
    grid.setLayout(new GridLayout(0,10)); 
    JPanel panel = new JPanel(); 
     panel = getCell(); 

     grid.add(panel); 
     } 
     } 
    this.add(grid); 
    }  
    protected abstract JPanel getCell(); 
    } 

は、上でクリックされた細胞のみが着色したままです。つまり、各JPanelのディメンションは20,20に復元されます。これはsetVisible()メソッドが実際に画面上のコンポーネントを再ペイントするためであると言われました。内容を変更せずに元の画面を元に戻すにはどうすればよいですか?ありがとうございました。

+1

最近、私がこの(基本的な)質問をしたのは今回が初めてです。以前のポスターには、[最小限で完全で検証可能な例](https://stackoverflow.com/help/mcve)がなくても、正確で信頼できる解決策を提供することは不可能です – MadProgrammer

+0

この "基本的な "質問誰も答えることはできません:) –

答えて

1

プログラムの色を直接UI要素に変更するのではなく、セルの色を表す2次元配列を作成して変更します。次に、可視性が変更されるか、セルがクリックされるたびに、配列の値に基づいてセルを再ペイントします。

関連する問題