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

  • Автор темы 9999999
  • Дата начала
Статус
Закрыто для дальнейших ответов.
9

9999999

#1
Всем привет. Нужна помощь.. =( В общем сделал я увеличение фигур на панели..
но, увеличение начинается с левого верхнего угла. Подскажите, как можно
сделать, чтобы именно с центра увеличивалось? Для увеличения использовал функцию "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]
 
Статус
Закрыто для дальнейших ответов.