Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2011, 15:16   #1
X@OC
Форумчанин
 
Аватар для X@OC
 
Регистрация: 18.06.2010
Сообщений: 273
Вопрос ArrayList IMAGE

доброго времени суток
Я написал программу кликаем по FRAME и рисуется Ellipse2D
теперь я хочу сделать так чтобы при кликании по FRAME я получал изображение, но не знаю как это сделать не подскажите
Вод код:
Цитата:
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;

public class Index {

public static void main(String[] args)
{
System.out.print("Hello world");
OpenWin ow = new OpenWin();
ow.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE);
ow.show();
}

}

class OpenWin extends JFrame
{
private static final long serialVersionUID = 1L;

public OpenWin()
{
setTitle("Open Window");
setSize(600,400);
OpenPanel op = new OpenPanel();
Container con = getContentPane();
con.add(op);

}
}

class OpenPanel extends JPanel
{
private ArrayList circle;
private Ellipse2D current;
public OpenPanel()
{
circle = new ArrayList();
current=null;
addMouseListener(new OpenMouse());

}

public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2D = (Graphics2D) g;
for(int i=0; i<circle.size(); i++)
{
g2D.setColor(new Color((i*100+20)%255,
(i*70+40)%255,
(i*120+111)%255));
g2D.fill((Ellipse2D) circle.get(i));
}

}

public void add(Point2D point)
{
current = new Ellipse2D.Double(point.getX()-10, point.getY()-10, 20, 20);
circle.add(current);
repaint();
}

private class OpenMouse extends MouseAdapter
{
public void mousePressed(MouseEvent event)
{
add(event.getPoint());
}
}
}
Спасибо
X@OC вне форума Ответить с цитированием
Старый 30.03.2011, 19:22   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Код:
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import java.util.*;

public class Index {

    public static void main(String[] args) {
        System.out.print("Hello world");
        OpenWin ow = new OpenWin();
        ow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ow.setVisible(true);
    }

}

class OpenWin extends JFrame {
    private static final long serialVersionUID = 1L;

    public OpenWin() {
        setTitle("Open Window");
        setSize(600, 400);
        OpenPanel op = new OpenPanel();
        Container con = getContentPane();
        con.add(op);

    }
}

class OpenPanel extends JPanel {
    private ArrayList<Point2D> points;
    private Image image;

    public OpenPanel() {
        points = new ArrayList<Point2D>();
        image  = Toolkit.getDefaultToolkit().getImage("/path/to/image.png");
        addMouseListener(new OpenMouse());
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2D = (Graphics2D) g;
        for (Point2D point : points) {
            g2D.drawImage(
                image,
                (int)point.getX() - image.getWidth(this)  / 2,
                (int)point.getY() - image.getHeight(this) / 2,
                this
            );
        }

    }

    public void add(Point2D point) {
        points.add(point);
        repaint();
    }

    private class OpenMouse extends MouseAdapter {
        public void mousePressed(MouseEvent event) {
            add(event.getPoint());
        }
    }
}
Что-то вроде этого?
netrino вне форума Ответить с цитированием
Старый 30.03.2011, 19:50   #3
X@OC
Форумчанин
 
Аватар для X@OC
 
Регистрация: 18.06.2010
Сообщений: 273
По умолчанию

спасибо работает
X@OC вне форума Ответить с цитированием
Старый 30.03.2011, 20:50   #4
X@OC
Форумчанин
 
Аватар для X@OC
 
Регистрация: 18.06.2010
Сообщений: 273
По умолчанию

netrino можно еще вопросик

вот написаны методы для удаления объекта при двойном щилчке
это для Ellipse2D
Код:
public Ellipse2D find(Point2D p)
	{
		for(int i =0; i<circle.size(); i++)
		{
			Ellipse2D e=(Ellipse2D)circle.get(i);
			if(e.contains(p)) return e;
		}
		return null;
	}
	public void remove(Ellipse2D e)
	{
		if(e==null) return;
		if(e==current) current=null;
		circle.remove(e);
		repaint();
	}
		private class OpenMouse extends MouseAdapter
		{
			public void mousePressed(MouseEvent event)
			{
				current = find(event.getPoint());
				if(current == null)
				add(event.getPoint());
			}
			public void mouseClicked(MouseEvent event)
			{
				if(event.getClickCount()>=2)
				{
				current = find(event.getPoint());
				if(current != null) remove(current);
				}
			}
		}
шото я пытался сделать под Point2D,
Код:
 public Point2D find(Point2D p)
	{
		for(Point2D point : points)
		{
			if(point.equals(p)) return p;
		}
		return null;
	}
	public void remove(Point2D p)
	{
		if(p==null) return;
		if(p==points2) points2=null;
		points.remove(p);
		repaint();
	}
    private class OpenMouse extends MouseAdapter {
        public void mousePressed(MouseEvent event) {
        	if(points2 == null)
            add(event.getPoint());
        }
        public void mouseClicked(MouseEvent event){
        	if(event.getClickCount()>=2)
				{
				find(event.getPoint());
				if(points2 != null) remove(points2);
				}
        }
никак не получилось может вы подскажите как эти методы отредактировать под Point2D?
еще раз спасибо

Последний раз редактировалось X@OC; 30.03.2011 в 20:53.
X@OC вне форума Ответить с цитированием
Старый 30.03.2011, 23:49   #5
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

С Point'ом что сложнее, так это попасть по именно той точке. Плюс, когда вы жмёте два раза, то создаётся два изображения, лучше было удаление повесить на правую кнопку. Переделал пример, для хранения положения картинок теперь используется Прямоугольник, а не Точка:
Код:
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import java.util.*;

public class Program {

    public static void main(String[] args) {
        System.out.print("Hello world");
        OpenWin ow = new OpenWin();
        ow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ow.setVisible(true);
    }

}

class OpenWin extends JFrame {
    private static final long serialVersionUID = 1L;

    public OpenWin() {
        setTitle("Open Window");
        setSize(600, 400);
        OpenPanel op = new OpenPanel();
        Container con = getContentPane();
        con.add(op);

    }
}

class OpenPanel extends JPanel {
    private ArrayList<Rectangle> imagesLoc;
    private Image image;

    public OpenPanel() {
        imagesLoc = new ArrayList<Rectangle>();
        image = new ImageIcon("/path/to/image.png").getImage();
        addMouseListener(new OpenMouse());
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2D = (Graphics2D) g;
        for (Rectangle imageLoc : imagesLoc) {
            g2D.drawImage(
                image,
                (int)imageLoc.getX(),
                (int)imageLoc.getY(),
                null
            );
        }

    }

    public void add(Point2D point) {
        Rectangle rect = new Rectangle(
            (int)point.getX() - image.getWidth (null) / 2,
            (int)point.getY() - image.getHeight(null) / 2,
            image.getWidth(this),
            image.getHeight(this)
        );

        imagesLoc.add(rect);
        repaint();
    }

    public void remove(Point2D point) {
        for (int i = 0; i < imagesLoc.size(); i++)
            if (imagesLoc.get(i).contains(point)) {
                imagesLoc.remove(i);
                repaint();
                break;
            }
    }

    private class OpenMouse extends MouseAdapter {
        public void mousePressed(MouseEvent event) {
            if (event.getButton() == MouseEvent.BUTTON1)
                add(event.getPoint());
            else if (event.getButton() == MouseEvent.BUTTON3)
                remove(event.getPoint());
        }
    }
}
netrino вне форума Ответить с цитированием
Старый 30.03.2011, 23:57   #6
X@OC
Форумчанин
 
Аватар для X@OC
 
Регистрация: 18.06.2010
Сообщений: 273
По умолчанию

Спасибо еще раз
X@OC вне форума Ответить с цитированием
Старый 31.03.2011, 20:40   #7
X@OC
Форумчанин
 
Аватар для X@OC
 
Регистрация: 18.06.2010
Сообщений: 273
По умолчанию

Продолжаем тему

Я зажимаю клавишу на изображения для того чтобы перетаскивать
При нажатии где либо на картинки то картинка перепрыгивает так как словно курсор стал прямо в уентр картинки
Код:
rec.setFrame(
			event.getX()-image.getWidth (null) / 2,
			event.getY()-image.getHeight (null) / 2,
			100,100);
Вопрос как сделать так чтобы при нажатии на изображение где либо курсор там и остался и изображение не прыгало?

когда так то изображение перепрыгивает на верхний левый угол
Код:
rec.setFrame(
			event.getX(),
			event.getY(),
			100,100);

Последний раз редактировалось X@OC; 31.03.2011 в 20:44.
X@OC вне форума Ответить с цитированием
Старый 01.04.2011, 00:02   #8
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Чтобы изображение не прыгало, нужно вычислить разницу между положением курсора и левой/верхней границей прямоугольника, в который вписано изображение. При чём вычислить только один раз - во время нажатия кнопки, а затем отнимать эту величину от положения курсора, вместо половины ширины/высоты, как у вас написано, когда мышь перемещается.
netrino вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с ArrayList в Visual C++ RefRegerator Visual C++ 0 07.03.2011 19:06
ArrayList в методе Stranger333 Общие вопросы по Java, Java SE, Kotlin 1 12.11.2010 08:27
ArrayList musomoh Общие вопросы .NET 9 11.05.2010 02:03
ArrayList jona Общие вопросы по Java, Java SE, Kotlin 7 30.04.2010 13:45
arraylist WOWka777 Общие вопросы .NET 4 11.04.2010 19:05