2017-03-18 10 views
0

私は自分のJavaスキルをバフしようとしています(コード化してから約10年経ちました)。現在、JFrameの端からバウンドするバウンドを持つ基本的なプログラムを作成しようとしています。しかし、このプログラムの初心者として、私はJPanelでラインとボックスを描こうとしました。repaint()にframe.setResizable(false)を設定する必要があります

私が見つけた問題は、frame.setResizable(false)を順番に呼び出すか、画面と枠をペイントする必要があることです。 JFrameのサイズが変更されたら、それをペイントします。しかし、JFrameが開くとすぐにペイントしたいと思います。置く

frame.setResizable(false); 
frame.setResizable(true); 

は冗長なようです。これを行うよりクリーンな方法があるので、JFrameが開いたときにペイントしますか?以下は

この場合に役立ちます私のコードです:

MAIN CLASS

package bbs; 

import java.awt.Dimension; 
import java.awt.Image; 
import java.awt.Toolkit; 

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 

public class BouncingBalls { 

    public static void main(String[] args) { 
     //Create the basic frame, set its size, and tell it to be visible 
     JFrame frame = new JFrame(); 
     frame.setSize(800, 600); 
     frame.setVisible(true); 

     //Get a icon for the Program 
     ImageIcon logoicon = new ImageIcon("ball.jpg"); 
     Image logo = logoicon.getImage(); 
     frame.setIconImage(logo); 

     frame.setResizable(false); 
     frame.setResizable(true); 

     //find the center of the screen and where the frame should go 
     Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); 
     int w = frame.getSize().width; 
     int h = frame.getSize().height; 
     int x = (dim.width-w)/2; 
     int y = (dim.height-h)/2; 

     //Move the window 
     frame.setLocation(x, y); 
     //Tell the program to stop when the X button is selected 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     Draw object = new Draw(); 
     frame.add(object); 

     object.drawing(); 
    } 

} 

PAINTINGのCLASS

package bbs; 

import java.awt.Color; 
import java.awt.Graphics; 

import javax.swing.JPanel; 

public class Draw extends JPanel { 

    /** 
    * This is added to handle the serialization warning and is of the type Long to accommodate the warning 
    */ 
    private static final long serialVersionUID = 1L; 

    public void drawing(){ 
     repaint(); 
    } 

    public void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     g.setColor(Color.BLACK); 
     g.drawLine(10, 20, 300, 200); 

     g.setColor(Color.BLUE); 
     g.fillRect(300, 200, 150, 200); 
    } 
} 
+0

'frame.setVisible(true);'をとり、すべてのコンポーネントを追加した後で最後に呼び出します。 'frame.setLocationRelativeTo(null)'を使用してフレームを画面の中央に配置することもできます。これは 'Toolkit.getDefaultToolkit()。getScreenSize(); 'を使用する場合よりも良い結果をもたらします。 – MadProgrammer

+0

フレームが可視になったら、変更したコンテナに対して 'revalidate'と' repaint'を使ってレイアウトとペイントパスをトリガすることができます – MadProgrammer

答えて

1
frame.setVisible(true); 

を。これは、後にすべての実行された最後のステートメントでなければなりませんcomポポントがフレームに追加されました。

次に、すべてのコンポーネントが正常にペイントされます。

関連する問題