2016-09-16 3 views
0

У меня есть два объекта вроде этого (два шарика), но они находятся в двух разных JFrame.Проблемы с двумя JFrame

Как я могу объединить их в одном JFrame?

Я попытался поместить другой объект в этот класс, но метод repaint() дал мне некоторые проблемы.

public class palla extends JFrame implements ActionListener 
{ 

public JPanel contentPane; 
private Image bufferVirtuale; 
private Graphics offScreen; 
private Timer tim = null; 
private int xPallina = 0; 
private int yPallina = 0; 
private int diametroPallina = 40; 
private int spostamento = 2; 
private int Delay = 10; 
private boolean destra,basso; 

public palla() 
{ 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(500, 200, 500, 400); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    contentPane.setLayout(new BorderLayout(0, 0)); 
    setContentPane(contentPane); 
    destra = true; 
    basso = true; 
    tim = new Timer(Delay,this); 
    tim.start(); 
} 

public void update(Graphics g) 
{ 
    paint(g); 
} 

public void paint(Graphics g) 
{ 
    bufferVirtuale = createImage(getWidth(),getHeight()); 
    offScreen = bufferVirtuale.getGraphics(); 
    Graphics2D screen = (Graphics2D) g; 
    offScreen.setColor(new Color(254,138,22)); 
    offScreen.fillOval(xPallina,yPallina,diametroPallina,diametroPallina); 
    screen.drawImage(bufferVirtuale,0,0,this); 
    offScreen.dispose(); 
} 

public void actionPerformed(ActionEvent e) 
{ 

     if(basso) 
     { 
      if(yPallina > (this.getHeight()-45)) 
      { 
       basso = false; 
       yPallina -= spostamento; 
      } 
      else 
      { 
       yPallina += spostamento; 
      } 
     } 
     else 
     { 
      if(yPallina < 25) 
      { 
       basso = true; 
       yPallina += spostamento; 
      } 
      else 
      { 
       yPallina -= spostamento; 
      } 
     } 
     //il controllo differente avviene a differenza del pannello server,se la pallina colpisce il margine destro. Mentre nel 
     //pannello server se la pallina colpiva il margine destro avveniva il trasferimento,qui invece la pallina deve rimbalzare 
     if(!destra)//perciò se la pallina va verso sinistra 
     { 
      if(xPallina < 5)//se la pallina raggiunge il margine sinistro e arrivo comunicato è falso 
      { 
       destra = true; 
       xPallina += spostamento; 
      } 
      else//se invece la pallina sta andando verso sinistra ma ancora non ha colpito il margine 
      { 
       xPallina -= spostamento;//viene diminuita la sua posizione di "spostamento"-pixel 
       if(xPallina < 0)//se però raggiunge il margine sinistro 
       { 
        destra = true; 
        xPallina += spostamento; 
       } 
      } 
     } 
     else//se invece la pallina va a destra 
     { 
      if(xPallina > (this.getWidth()-45))//si controlla se colpisce il margine destro 
      { 
       destra = false;//si fa cambiare direzione,va a sinistra 
       xPallina -= spostamento;//e si diminuisce le coordinate delle X 
      } 
      else//altrimenti se non ha colpito ancora il margine si aumento le coordinate 
      { 
       xPallina += spostamento; 
      } 
     } 

    repaint(); 
} 

}

+2

1. Немного непонятно, о чем вы спрашиваете (вы упомянули объединение двух вещей, но кажется, что только один отправлен) 2. ', но метод repaint() дает мне некоторые проблемы.« Какие проблемы? 3. Я настоятельно рекомендую рисовать на легкий компонент (например, «JPanel») и переопределять его метод «paintComponent». – copeg

+0

Два объекта одинаковы. Когда mouseMoved я хочу, чтобы только один объект перерисовывался, когда я вызываю метод repaint у mouseMoved, он перерисовывает два объекта. Я не знаю, ясно ли сейчас. –

+0

'Я не знаю, ясно ли сейчас 'Извините, но не совсем. Немного более запутанный теперь с упоминанием 'mouseMoved', поскольку нигде в вашем коде не' MouseListener'. – copeg

ответ

2

Не отменяйте обновление() и не отменяют краску() на JFrame. Это не так, как делается обычная роспись.

как рисовать два разных объекта в JFrame

на заказ картина делается путем переопределения paintCoponent() метод в JPanel, а затем добавить панель к раме. Прочтите раздел из учебника Swing по телефону Custom Painting для получения рабочих примеров.

Чтобы нарисовать несколько объектов на одной панели, вы можете проверить Custom Painting Approaches на два распространенных способа сделать это.

Смежные вопросы