2015-05-22 2 views
-1

Я строю игру в судоку. Я нарисовал сетку до сих пор и запрограммировал выбор поля, но выбранное мной изображение для выбора не появляется. Мой класс для селектора:Судоку: Изображение выбора не отображается

package com.brendenbunker; 

import javax.swing.*; 

public class Selection { 

public JLabel boxSelected; 
public ImageIcon selected; 
int x, y; 

public Selection(){ 

    x = 0; 
    y = 0; 
    selected = new ImageIcon(getClass().getResource("/Selected.png")); 

    boxSelected = new JLabel(""); 
    boxSelected.setIcon(selected); 
    boxSelected.setBounds((x * (selected.getIconWidth() + 4) + (x/3) * 4) + 4, (y * (selected.getIconWidth() + 4) + (y/3) * 4) + 4, selected.getIconWidth(), selected.getIconHeight()); 
} 

public Selection(int x, int y){ 

    this.x = x; 
    this.y = y; 
    selected = new ImageIcon(getClass().getResource("/Selected.png")); 

    boxSelected = new JLabel(""); 
    boxSelected.setIcon(selected); 
    boxSelected.setBounds((x * (selected.getIconWidth() + 4) + (x/3) * 4) + 4, (y * (selected.getIconWidth() + 4) + (y/3) * 4) + 4, selected.getIconWidth(), selected.getIconHeight()); 
} 

public void setNewSelection(int x, int y) { 
    this.x = x; 
    this.y = y; 
    boxSelected.setBounds((x * (selected.getIconWidth() + 4) + (x/3) * 4) + 4, (y * (selected.getIconWidth() + 4) + (y/3) * 4) + 4, selected.getIconWidth(), selected.getIconHeight()); 
} 
} 

Код, который отображает все это:

package com.brendenbunker; 

import javax.swing.*; 
import java.awt.*; 
import java.util.Random; 

public class ScreenGenerator extends JFrame{ 

//Intro Components 
//JLabel temp; 
JLabel[] gridLabel, numbLabel, numbBackLabel; 
JLabel[][] numbDisp; 
ImageIcon gridPic, numbPic, numbBackPic; 
Rectangle[][] boxArea; 
Selection selection; 
Random random; 
//intro Vars 


public ScreenGenerator() { 

    setLayout(null); 

    random = new Random(); 
    selection = new Selection(); 
    gridPic = new ImageIcon(getClass().getResource("/Grid_Unified.png")); 
    numbBackPic = new ImageIcon(getClass().getResource("/Square.png")); 
    gridLabel = new JLabel[9]; 
    numbLabel = new JLabel[9]; 
    numbBackLabel = new JLabel[9]; 
    boxArea = new Rectangle[9][9]; 
    numbDisp = new JLabel[9][9]; 

    for (int i=0; i<9; i++) { 
     gridLabel[i] = new JLabel(""); 
      gridLabel[i].setBounds(((i+1)%3)*gridPic.getIconWidth(),Math.round(i/3)*gridPic.getIconHeight(),gridPic.getIconWidth(),gridPic.getIconHeight()); 
     numbBackLabel[i] = new JLabel(""); 
     numbBackLabel[i].setBounds(i*numbBackPic.getIconWidth()+1,gridPic.getIconHeight()*3,numbBackPic.getIconWidth(),numbBackPic.getIconHeight()); 
     numbLabel[i] = new JLabel(""); 
     numbLabel[i].setBounds(i*numbBackPic.getIconWidth(),gridPic.getIconHeight()*3,numbBackPic.getIconWidth(),numbBackPic.getIconHeight()); 
     for (int j=0; j<9; j++) { 
      numbDisp[i][j] = new JLabel(""); 
      numbDisp[i][j].setBounds((j * (selection.selected.getIconWidth() + 4) + (j/3) * 4) + 4, (i * (selection.selected.getIconWidth() + 4) + (i/3) * 4) + 4, selection.selected.getIconWidth(), selection.selected.getIconHeight()); 
      boxArea[j][i] = new Rectangle((j*(selection.selected.getIconWidth()+4)+(j/3)*4)+4,(i*(selection.selected.getIconWidth()+4)+(i/3)*4)+4,selection.selected.getIconWidth(),selection.selected.getIconHeight()); 

      add(numbDisp[i][j]); 
     } 
    } 

    for (int i=0; i<9; i++) { 

     numbPic = new ImageIcon(getClass().getResource("/numb_" + (i+1) + ".png")); 
     numbLabel[i].setIcon(numbPic); 
     gridLabel[i].setIcon(gridPic); 
     numbBackLabel[i].setIcon(numbBackPic); 

     add(selection.boxSelected); 
     add(gridLabel[i]); 
     add(numbLabel[i]); 
     add(numbBackLabel[i]); 

    } 

    setBoxNumb(random.nextInt(9)+1,random.nextInt(9)+1,random.nextInt(9)+1); 
    selection.setNewSelection(1,2); 

} 

public void setBoxNumb(int x, int y, int numb){ 

    numbPic = new ImageIcon(getClass().getResource("/numb_" + numb + ".png")); 
    numbDisp[x - 1][y - 1].setIcon(numbPic); 

} 
} 

Так что я пытаюсь спросить, почему изображение, которое я хочу, чтобы отображаться, если поле выбрано делает не появляется? Кто-нибудь знает, как это исправить ?

+0

Вы забыли задать вопрос. Какая помощь вам нужна? Будьте максимально конкретными. –

+0

Я Отредактировал это. Спасибо – Nuiofrd

+0

Почему бы вам не нарисовать «JPanel»? – Sybren

ответ

0

То, что я обнаружил, это то, что слои макета отстают от ожидаемого. Ярлык, который вы добавите первым, всегда будет оставаться на вершине. Эта надпись не будет нарисована JComponents после добавления оригинала. Итак, в основном, чем раньше в коде вы добавляете компонент в JFrame, тем выше приоритет, который имеет компонент.

0
  1. Попробуйте упростить свою программу до самой простой, которая воспроизводит проблему. Вы можете обнаружить проблему в процессе, но если нет, у вас будет ясный пример, который легко понять.

  2. Одиночный шаг через вашу программу, чтобы убедиться, что она ведет себя так, как вы ожидаете.

  3. Добавить регистрацию в свою программу, чтобы убедиться, что она ведет себя так, как вы ожидаете.

Если возникнут какие-либо конкретные вопросы, не стесняйтесь задать конкретный вопрос. Но прямо сейчас вы в основном спрашиваете: «Как мне отлаживать программу?»

+0

Хорошо, я попробую это. – Nuiofrd