2016-09-16 61 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我希望只有一個對象被重畫,而當我在mouseMoved調用repaint方法時重繪這兩個對象。我不知道現在是否清楚。 –

+0

'我不知道現在是否清楚'對不起,但不是真的。現在提到'mouseMoved'就更困惑了,因爲你的代碼中沒有一個是MouseListener。 – copeg

回答

2

不覆蓋更新(),並不會覆蓋paint()方法在JFrame。這不是定製繪畫完成的方式。

如何

風俗畫是通過覆蓋一個JPanel的paintCoponent()方法做一個JFrame得出兩個不同的對象,然後將面板添加到框架。請閱讀Custom Painting的Swing教程中的部分以獲取工作示例以幫助您入門。

要在同一個面板上繪製多個對象,可以查看Custom Painting Approaches以瞭解執行此操作的兩種常用方法。