2013-03-20 42 views
-1

我正在開發一個在java中的汽車模擬。我的編碼如下。我想把一個面板,並在其中成爲與180度的速度計圖像一起旋轉的線。我的問題是我如何做到這一點?#java如何在畫布中插入圖像

public class House extends JPanel implements ActionListener 
    { 
    MyCanvas canvas; 
    JButton mybutton,mybutton1,mybutton2,mybutton3,mybutton4,mybutton5; 
    JTextField text1,text2,text3; 
    JSlider sliderTransX, sliderTransY, sliderRotateTheta, sliderRotateX, 
     sliderRotateY, sliderScaleX, sliderScaleY, sliderWidth; 
    `enter code here`int k = 0; 

    double transX = 0.0; 
    double transY = 0.0; 
    double rotateTheta = 0.0; 
    double rotateX = 345.0; 
    double rotateY = 250.0; 
    double scaleX = 1.0; 
    double scaleY = 1.0; 
    float width = 1.0f; 
    Cargame game = new Cargame(); 

    public House() 
    { 
    super(new BorderLayout()); 
    JPanel controlPanel = new JPanel(new GridLayout(3, 3)); 
    add(controlPanel, BorderLayout.NORTH); 
    sliderRotateTheta = setSlider(controlPanel, JSlider.HORIZONTAL, 0, 180, 
     0, 90, 45); 
    mybutton = new JButton("Accelerate"); 
    mybutton.addActionListener(this); 
    mybutton1 = new JButton("ShiftUp"); 
    mybutton1.addActionListener(this); 
    mybutton2 = new JButton("ShiftDown"); 
    mybutton2.addActionListener(this); 
    mybutton3 = new JButton("Deaccelerate"); 
    mybutton3.addActionListener(this); 
    mybutton4 = new JButton("Start Engine"); 
    mybutton4.addActionListener(this); 
    mybutton5 = new JButton("Stop Engine"); 
    mybutton5.addActionListener(this); 
    text1=new JTextField(5); 
    text2=new JTextField(5); 
    text3=new JTextField(5); 

    sliderWidth = new JSlider(JSlider.HORIZONTAL, 0, 20, 1); 
    sliderWidth.addChangeListener(new ChangeListener() 
    { 
     public void stateChanged(ChangeEvent e) { 

     width = sliderWidth.getValue(); 
     canvas.repaint(); 
     } 
    }); 

    JPanel widthPanel = new JPanel(); 
    widthPanel.setLayout(new GridLayout(3, 3)); 
    widthPanel.add(mybutton); 
    widthPanel.add(mybutton1); 
    widthPanel.add(mybutton2); 
    widthPanel.add(mybutton3); 
    widthPanel.add(mybutton4); 
    widthPanel.add(mybutton5); 
    widthPanel.add(text1); 
    widthPanel.add(text2); 
    widthPanel.add(text3); 
    add(widthPanel, BorderLayout.SOUTH); 

    canvas = new MyCanvas(); 
    add(canvas, "Center"); 
    } 

    public void actionPerformed(ActionEvent e) 
    { 
     if (e.getSource() == mybutton) 
     { 
      game.Accelerate(); 
     } 
     if (e.getSource() == mybutton1) 
     { 
      game.ShiftUp(); 
     } 
     if (e.getSource() == mybutton2) 
     { 
      game.ShiftDown(); 
     } 
     if (e.getSource() == mybutton3) 
     { 
      game.Deaccelerate(); 
     } 

     JSlider tempSlider=new JSlider(); 
     rotateTheta= ((double)game.getLevel()) * Math.PI/180; 
     text1.setText(String.valueOf(game.getLevel())); 
     text2.setText(String.valueOf(game.getGear())); 
     text3.setText(String.valueOf(game.Speedometer())); 
     canvas.repaint(); 
    } 


    public JSlider setSlider(JPanel panel, int orientation, int minimumValue, 
     int maximumValue, int initValue, int majorTickSpacing, 
     int minorTickSpacing) { 
    JSlider slider = new JSlider(orientation, minimumValue, maximumValue, 
     initValue); 

    slider.addChangeListener(new ChangeListener() { 
     public void stateChanged(ChangeEvent e) { 
     JSlider tempSlider = (JSlider) e.getSource(); 
sliderRotateTheta.setValue(k); 
     if(tempSlider.equals(sliderRotateTheta)) 
     { 
      rotateTheta = sliderRotateTheta.getValue() * Math.PI/180; 

      canvas.repaint(); 

      }} 

    }); 
    slider.setVisible(false); 
    panel.add(slider); 
    return slider; 
    } 

    class MyCanvas extends Canvas {  
    public void paint(Graphics g) { 
     Graphics2D g2D = (Graphics2D) g; 
     g2D.rotate(rotateTheta, rotateX, rotateY); 

     BasicStroke stroke = new BasicStroke(width); 
     g2D.setStroke(stroke); 

     drawHome(g2D); 
    } 

    public void drawHome(Graphics2D g2D) { 
     Line2D line7 = new Line2D.Float(205f, 250f, 345f, 250f); 
     g2D.draw(line7); 
    } 
    } 

    public static void main(String[] a) { 
    JFrame f = new JFrame(); 
    f.getContentPane().add(new House()); 
    f.setDefaultCloseOperation(1); 
    f.setSize(700, 550); 
    f.setVisible(true); 
    } 

} 
+1

'class MyCanvas extends Canvas {'不要混合Swing和AWT組件沒有很好的理由。這裏擴展一個'JPanel'。 – 2013-03-20 10:46:46

+0

忘記'java.awt'包中的所有組件,並始終使用'javax.swing'包中的輕量級等價物。這裏擴展'JPanel'並覆蓋'paintComponent'而不是'paint'。 – 2013-03-20 11:27:23

回答