2016-04-04 17 views
-1

JFrame'imde 3 farklı panelim var ve paneller içindeki düğmelerin metnini değiştiren bir yöntem çağırdığımda 1. ve 3. panelimi güncellemeye çalışıyorum. (3. panelin (panel) içinde, 7 x 7 ızgarada 49 düğme vardır)Bir JFrame içinde JPanels'i yeniliyor

İlk panelde (panel1) yalnızca metni güncellemeye çalıştığım 1 jbutton var ama bu da çalışmıyor.

public void update() { 
    for (int c=0; c< Board.COLS; c++) { 
     for (int r=0; r< Board.ROWS; r++) { 
      JButton b = (JButton) panel.getComponent(r*7+c); 
      b.setOpaque(true); 
      b.setFocusable(false); 
      b.setPreferredSize(new Dimension(220,220)); 
      b.setFont(b.getFont().deriveFont(Font.BOLD, b.getFont().getSize()*6)); 

      b.setText("" + board.map[c][r].getType()); 
      panel.add(b); 
      } 
     } 

    JButton extra = (JButton) (panel1.getComponent(0)); 
    extra.setPreferredSize(new Dimension(200,100)); 
    extra.setFont(extra.getFont().deriveFont(Font.BOLD, extra.getFont().getSize()*6)); 
    extra.setText("" + board.oldTile.getType()); 
    panel1.add(extra); 

    panel.repaint(); 
    panel1.repaint(); 
}` 

Burada sahip olduğum şey, JFrame'im üzerinde bir miktar canlandırıcı oluyor, ancak her yere gidiyor. Değerler olması gereken yerde değildir ve bazen JButtonlar boştur. Sorunun paneldeki belirli düğmeyi aldığını düşünüyorum ve bunu nasıl yapacağımı bilmiyorum.

+0

Sorununuzu tam olarak anlayabilmemiz ve size yardımcı olabilmek için gerçekten bir [mcve] oluşturup göndermeniz gerekiyor. Bu sizin tam programınız değil, programınızın küçük bir alt kümesidir, sizin için sorununuzu derler, çalıştırır ve gösterir. "Küçük" anahtar kelimesine dikkat edin. Bu kullanışlı araç hakkında daha fazla bilgi için lütfen [mcve] bağlantısına bakın. –

+1

Bu tür bir kodun beni endişelendirdiğini unutmayın: 'panel.getComponent (r * 7 + c);' gibi çok mantıklı olan program mantığınızı sürdürebilmek için görünümden yapısal kod kullanmaya çalışıyorsunuz gibi görünüyor. yapılacak şey. –

+1

Güncelleştirme() yalnızca varolan düğmelerin metnini değiştirmesi gerektiğini söylediğinizde yeni düğmeler eklemeyi sürdürüyor? – FredK

cevap

4
panel.add(b); 

Bu nedenle, aynı düğmeyi eklemeye devam edin, ancak bileşen siparişini bozmaya devam edin.

Benim düşüncem, JButton[][] iki boyutlu bir diziyi tutmak, her düğme oluşturulduktan ve ana makineye eklendikten hemen sonra doldurmak olacaktır. Parça sayınızı takip etmeye gerek kalmadan düğmelerinize doğrudan satır ve sütun aracılığıyla erişin.

+1

Evet ve bu sayede bunları konteyner bileşen numarası ile elde etmeye çalışmaktan kaçının. 1+ –

+0

Çok teşekkürler! @MouseEvent – Kisuna97

İlgili konular