Увеличение объектов на панеле. (Срочно)

Тема в разделе "Java", создана пользователем 9999999, 5 май 2011.

Статус темы:
Закрыта.
  1. 9999999

    9999999 Гость

    Всем привет. Нужна помощь.. =( В общем сделал я увеличение фигур на панели..
    но, увеличение начинается с левого верхнего угла. Подскажите, как можно
    сделать, чтобы именно с центра увеличивалось? Для увеличения использовал функцию "scale".

    Исходник:

    <!--shcode--><pre><code class='java'>import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import java.awt.geom.AffineTransform.*;

    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Point;
    import java.awt.Polygon;
    import java.awt.Shape;
    import java.awt.EventQueue;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionAdapter;
    import java.awt.geom.AffineTransform;
    import javax.swing.JFrame;
    import javax.swing.JPanel;

    public class square
    {
    public static int a = 2;
    public static double zoom = 1;
    public static int b = -2;
    public static JLabel label;
    public static JLabel label2;
    public static Color check = new Color(0, 255, 0);

    public static void main(String[] args)
    {
    MyFrame frame = new MyFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.show();
    }
    }
    class MyFrame extends JFrame
    {
    JScrollBar scroll;
    JSlider slider;

    public MyFrame()
    {
    setLayout(null);

    int size = 500;
    setSize(size,size);
    MyPanel panel = new MyPanel();
    Container pane = getContentPane();

    pane.add(panel);
    panel.setSize(600,600);

    square.label = new JLabel("Value: ");
    square.label.setBounds(30,30,100,20);
    square.label2 = new JLabel("Value zoom: ");
    square.label2.setBounds(200,30,100,20);
    scroll = new JScrollBar(JScrollBar.VERTICAL,1,2,1,50);
    scroll.setBounds(20,50,20,400);

    slider = new JSlider(JSlider.HORIZONTAL, 1, 15 , 1); //ORIENTATION, MIN, MAX, CURRENT
    slider.setMajorTickSpacing(1);
    slider.setPaintTicks(true);
    slider.setBounds(70,50,400,40);
    event e = new event();
    slider.addChangeListener(e);
    slider.setBackground(Color.white);

    pane.add(slider);
    //pane.add(scroll);
    //pane.add(square.label);
    pane.add(square.label2);

    //--------------------------------------------------------------------------------
    scroll.addAdjustmentListener(new AdjustmentListener()
    {
    public void adjustmentValueChanged(AdjustmentEvent ae)
    {
    square.a = ae.getValue();
    square.label.setText("Value: "+ ae.getValue());
    square.b = -ae.getValue();
    if(ae.getValue() >= 30)
    {
    square.check = new Color(255, 0, 0);
    }
    else
    {
    square.check = new Color(0, 255, 0);
    }
    repaint();
    }
    });
    //--------------------------------------------------------------------------------
    }
    public class event implements ChangeListener
    {
    public void stateChanged(ChangeEvent e)
    {
    square.zoom = slider.getValue();
    square.label2.setText("Value is: " +square.zoom);
    repaint();
    }
    }
    //--------------------------------------------------------------------------------

    }
    class MyPanel extends JPanel
    {
    public void paintComponent(Graphics gIn)
    {
    Graphics2D g = (Graphics2D)gIn.create();

    g.translate(getWidth()-450, getHeight()-450);
    //g.fillRect(0,0,20,20);
    g.setColor(square.check);
    //g.setFont(new Font("Sans", Font.BOLD, 24));
    //g.fillRect(0,-200,square.a,150);
    //g.fillRect(0,-200,square.b,150);

    //g.rotate(-30.0 * Math.PI / 180.0);
    //g.fillRect(40,-50,150,square.a);

    g.scale(square.zoom,square.zoom); /* zoom function.. */

    g.fillOval(100,100,10, 10);
    g.fillOval(120,100,10, 10);
    g.fillOval(110,130,10, 10);

    repaint();
    }
    }[/CODE]
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей