Рисование и анимация сетки изображений - PullRequest
0 голосов
/ 13 августа 2010

Вы действительно нуждаетесь в вашей помощи, ребята. Я должен сделать анимацию на сетке изображений 3х3.

Мои вопросы:

1) Как мне построить сетку 3 X 3 с изображениями .?

Это то, что я сделал, но не работает, потому что я получаю исключение nullpointerException в этой строке: rail[x][y] = new JLabel(icon);

import java.awt.Component;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Toolkit;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class ButtonGrid {

    JFrame frame=new JFrame(); //creates frame

    JButton[][] grid; //names the grid of buttons
    JLabel[][] rail = null;

    public ButtonGrid(int width, int length){ //constructor with 2 parameters
            frame.setLayout(new GridLayout(width,length)); //set layout of frame
            grid=new JButton[width][length]; //allocate the size of grid
            for(int y=0; y<length; y++){ 
                    for(int x=0; x<width; x++){
                            //grid[x][y]=new JButton("("+x+","+y+")");   
                            //frame.add(grid[x][y]); //adds button to grid
                        ImageIcon icon = createImageIcon("images/crossingsHorizontal.JPG", "");
                        //JLabel lab = new JLabel(icon);
                        rail[x][y] = new JLabel(icon);
                        frame. add(rail[x][y]);
                    }
            }
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
            frame.pack(); 
            frame.setVisible(true);
    }

     public static ImageIcon createImageIcon(String path,String description) {
            java.net.URL imgURL = ButtonGrid.class.getResource(path);
            if (imgURL != null) {
                return new ImageIcon(imgURL, description);
            } else {

                return null;
            }
    }


    public static void main(String[] args) {
        new ButtonGrid(3,3);//makes new ButtonGrid with 2 parameters
}


}

2) Как я могу использовать эту сетку в качестве фона для моей анимации?

3) Я должен повернуть изображение в сетке [2] [2], как я могу получить доступ к этому изображению в одиночку и повернуть его? Я знаю, как сделать вращение, так скажите мне, как получить элемент [2] [2], чтобы я мог вращать его.

спасибо за вашу помощь

Ответы [ 3 ]

0 голосов
/ 13 августа 2010

Поскольку вы пытаетесь построить сетку, я предлагаю вам взглянуть на GridLAyout . Это позаботится о ваших компонентах, поскольку разделит данную область на сетку.

Не обращая внимания на поворот изображения, взгляните на метод rotate .

0 голосов
/ 13 августа 2010

Ответ на 1)

Вы получаете NPE, потому что не инициализируете массив с именем «rail», как вы делаете с «сеткой»:

public ButtonGrid(int width, int length){ //constructor with 2 parameters
        frame.setLayout(new GridLayout(width,length)); //set layout of frame
        grid=new JButton[width][length]; //allocate the size of grid
-->     rail=new JLabel[width][length]; //allocate the size of rail
        for(int y=0; y<length; y++){ 

Как правило, лучшеработать в JPanel, как предложено, но «add (...)» и «setLayout (...)» в JFrame - это вспомогательные методы, которые делегируют панель содержимого, поэтому это будет работать.

0 голосов
/ 13 августа 2010

Эта строка неверна с Swing:

frame.setLayout(new GridLayout(width,length))

Как я помню, мы должны применять макеты к панелям, т.е.

frame.getContentPane().setLayout (new GridLayout(width,length));

Эта строка также неверна:

frame.add(rail[x][y]);

решение такое же: используйте contentPane.

Некоторые основы можно найти на странице JFrame javadocs .

...