2017-02-28 4 views
0

J'essaie de créer des boutons à des endroits aléatoires dans le cadre de x et y axises avec différents gridwidth et gridheight mais la chose est, je ne suis pas capable de le courir car je reçois des erreurs:/Voici mon code .. Qu'est-ce que je fais mal?Java: newConstraints ne fonctionne pas

public class calculator extends JPanel{ 
public static final int WIDTH=320; 
public static final int HEIGHT=480; 
private GridBagLayout layout; 
private GridBagConstraints gbc; 
private JButton[] newbuttons; 
private JTextField text; 
private int[][] newConstraints= new int[][]{ 
     {0,5,2,1}, 
     {0,4,1,1}, 
     {1,4,1,1}, 
     {2,4,1,1}, 
     {0,0,1,1}, 
     {0,0,1,1}, 
     {0,0,1,1}, 
     {0,0,1,1}, 
     {0,0,1,1}, 
}; 
public calculator(){ 
    setPreferredSize(new Dimension(WIDTH,HEIGHT)); 
    layout=new GridBagLayout(); 
    layout.columnWidths= new int[]{110,120,40,80}; 
    layout.rowHeights= new int[]{80,80,80,80,80,80}; 
    setLayout(layout); 
    gbc= new GridBagConstraints(); 
    newbuttons=new JButton[10]; 
    for(int i=0;i<newbuttons.length;i++){ 
     newbuttons[i]=new JButton(""+i); 
     gbc.gridx=newConstraints[i][0]; 
     gbc.gridy=newConstraints[i][1]; 
     gbc.gridwidth=newConstraints[i][2]; 
     gbc.gridheight=newConstraints[i][3]; 
     gbc.fill=GridBagConstraints.BOTH; 
     add(newbuttons[i],gbc); 
    } 


} 
    public static void main(String[] args) { 
     JFrame frame= new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLayout(new BorderLayout()); 
     frame.add(new calculator(), BorderLayout.CENTER); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

} 
+3

Si vous posez des questions sur les erreurs, vous voudrez publier les messages d'erreur complets. –

+0

Etes-vous sûr que l'erreur est dans ce code? Où est le JFrame et la méthode principale? –

Répondre

2

vous obtenez une erreur:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9 

Parce que vous essayez de jeter boucle un tableau qui contient l'élément 10 et en réalité votre tableau contient seulement 9.

Vous devez changer:

newbuttons = new JButton[10]; 

à

newbuttons = new JButton[9]; 
2

Taille de newConstraints est 9 et lorsque la valeur de i = 9 il se brisera parce qu'il n'y a pas de valeur pour 9 index.

private int[][] newConstraints= new int[][]{ 
    {0,5,2,1},//0 
    {0,4,1,1},//1 
    {1,4,1,1},//2 
    {2,4,1,1},//3 
    {0,0,1,1},//4 
    {0,0,1,1},//5 
    {0,0,1,1},//6 
    {0,0,1,1},//7 
    {0,0,1,1},//8 
       //9 
}; 

Ajouter une valeur {0,0,1,1} dire au 9 index et vous panneau sera chargé. Une autre chose, le premier caractère pour le nom de classe devrait être en majuscule. Utilisez Calculator comme nom de classe au lieu de calculator.