2011-04-18 1 views
0
public class my_gui extends JFrame { 
    public my_gui() { 
     setTitle("Broscute 1.0 :p"); 
     setSize(954, 320); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setResizable(false); 
     setIconImage(Toolkit.getDefaultToolkit().getImage("src/img/test.png")); 
     setVisible(true); 
     initUI(); 
    } 
    public final void initUI() { //ui here 
     setLayout(null); 
     setLocationRelativeTo(null); 
     JPanel panel = new JPanel(); 
     panel.setLayout(null); 
     panel.setBounds(0, 0, 954, 320); 
     getContentPane().add(panel); 
     JButton button = new JButton("Start!"); 
     button.setBounds(0, 0, 954, 40); 
     final ImagePanel[] label = new ImagePanel[4]; 
     int i, j; 
     for(i=40, j=0;i<=220;i+=60, j++){ 
      label[j] = new ImagePanel(0, i); 
      label[j].setBounds(0, 0, 954, 320); 
      panel.add(label[j]); 
     } 
     button.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent event) { 
       label[3].X += 100; 

      } 
     }); 
     panel.add(button); 
    } 
} 
class ImagePanel extends JComponent{ 
    public int X, Y; 
    float v = 10; 
    private BufferedImage image; 
    ImagePanel(){} 
    public ImagePanel(int x, int y) { 
     X = x; Y = y; 
     try {     
      image = ImageIO.read(new File("src/img/broasca.png")); 
     } catch (IOException ex) { 
      // handle exception... 
     } 
    } 
    @Override 
    public void paintComponent(Graphics g) { 
     super.paintChildren(g); //a friend told me I should put it here 
     g.drawImage(image, X, Y, this); // see javadoc for more info on the parameters 
     repaint(); //I think this should go here 
    } 
} 

Что-то не так.Код Java, нужен быстрый обзор (качели, графика 2D)

Если я запускаю его из netbeans, иногда он рисует изображения по назначению .. но иногда я получаю только главное окно и кнопку «Пуск» после перемещения мыши.

Запуск его вне IDE, он не смог найти изображения.

Что я здесь делаю неправильно? Любые советы высоко ценится. Спасибо за ваше время.

+0

Возможно, вам лучше попросить об этом в обзоре кода: http://codereview.stackexchange.com/ – DJClayworth

+0

приятно, я не знал о Code Review. С этого момента я буду иметь в виду, спасибо. – sdadffdfd

ответ

2

Не показывать диалог до тех пор, пока не будет выполнена вся инициализация, т.е. переместите setVisible в последний метод в конструкторе.

для лучшего повторного использования, у вас нет класса вызовов класса JVRAM, установленного для всех (правда), пусть клиент сделает это.

Проблема заключается в том, что после отображения окна любые изменения, которые вы делаете в окне, ДОЛЖНЫ выполняться в потоке графического интерфейса пользователя, иначе вы получите ложные проблемы, подобные тем, которые вы видите.

+0

как шарм, большое спасибо – sdadffdfd

+0

любые идеи о том, как получить изображения для загрузки, как только я создам его в файле .jar? – sdadffdfd

+0

новый ImageIcon (my_gui.class.getResource ("/ img/test.png")); – MeBigFatGuy

1

Первое, что вы обычно делаете в paintComponent, - это очистить экранное растровое изображение через super.paintComponent(). Уверен, что это ваша проблема.

+0

просто попробовал с super.paintComponent() вместо super.paintChildren() .. такие же результаты, иногда он рисует изображение, иногда нет. – sdadffdfd