2016-09-16 6 views
0

2つのオブジェクト(2つのボール)がありますが、2つの異なるJFrameにあります。2つのJFrameの問題

どのように1つの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つのことを組み合わせると言いますが、1つだけが投稿されているようです)2. 'repaint()メソッドは私にいくつかの問題を与えます。 3.軽量コンポーネント(例: 'JPanel')に描画し、' paintComponent'メソッドをオーバーライドすることを強くお勧めします。 – copeg

+0

2つのオブジェクトは同じです。 mouseMoved私はそれが1つだけのオブジェクトをrepaintしている間、私はそれが2つのオブジェクトを再描画mouseMovedでrepaintメソッドを呼び出すとき。今はっきりしているかどうかはわかりません。 –

+0

「私は分かりませんが、今は分かりますか」残念ですが、本当はありません。 'mouseMoved'の言及と今やちょっと混乱しています。あなたのコードのどこにもないように、' MouseListener'があります。 – copeg

答えて

2

(更新を無効にしないでください)とJFrameの上の塗料を()をオーバーライドしません。それはカスタム塗装が行われる方法ではありません。

はどのようにJFrameの中に2つの異なるオブジェクトを描画

カスタムペイントはJPanelののpaintCoponent()メソッドをオーバーライドすることによって行われ、その後、あなたは、フレームにパネルを追加します。スイングチュートリアルのCustom Paintingのセクションを読んで作業を開始してください。

同じパネル上に複数のオブジェクトをペイントするには、これを行う一般的な2つの方法についてCustom Painting Approachesをチェックしてください。