Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> нарисовать линию от одного прямоугольника к другом 
:(
    Опции темы
biskot133
  Дата 11.10.2010, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.10.2010

Репутация: нет
Всего: нет



Привет всем Я пытаюсь сделать этот код , я новичок в Java, и я стараюсь узнать некоторые вещи,
Мне нужно создать программу, которая рисует прямоугольники я уже сделал эту часть, теперь я должен быть в состоянии нарисовать линию от одного прямоугольника к другому, я стараюсь сделать это с g.drawline (X, Y, X, Y), но когда мышь перетащить я могу сделать линию, но это не нормальная линии так, как это сделать? Я попытался Line2D.Float в новом Line2D.Float = (X, Y, X, Y), но это не будет работать, и когда я нажимаю с помощью мыши где-то линия исчезает, и последнее, что мне нужно сделать, когда я нажмите правой кнопкой мыши , чтобы написать текст в любом месте на рамке .. и это я не знаю, как это сделать я читал много, но не могу понять, как просто написать на раме .. был бы признателен, если Вы могли бы мне помочь ..... извините за ошибки в синтаксисе, но я изучаю русский язык сейчас


Код



import java.awt.Container;
import java.awt.Cursor;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;


import javax.swing.JFrame;
import javax.swing.JPanel;

public class MouseDragActionPanel extends JPanel implements MouseMotionListener {
  private static final int SquareWidth = 130;

  private static final int Max = 100;

  private Rectangle[] squares = new Rectangle[Max];

  private int squareCount = 0;

  private int currentSquareIndex = -1;

  public MouseDragActionPanel() {
    addMouseListener(new MouseAdapter() {
      public void mousePressed(MouseEvent evt) {
        if (evt.getButton()==MouseEvent.BUTTON1 ){
          int x = evt.getX();
        int y = evt.getY();
        currentSquareIndex = getSquare(x, y);
        if (currentSquareIndex < 0) // not inside a square
          add(x, y);
      }  else if(evt.getButton()==MouseEvent.BUTTON2 ){
       int x = evt.getX();
        int y = evt.getY();

        // Graphics g = getGraphics();
          //g.drawChars(data, y, y, x, y);
}
      }

      public void mouseRightClicked(MouseEvent evt) {
        int x = evt.getX();
        int y = evt.getY();

        if (evt.getClickCount() >= 2) {
          remove(currentSquareIndex);
        }
      }
    });
    addMouseMotionListener(this);
  }

  public void paintComponent(Graphics g) {
    super.paintComponent(g);
    for (int i = 0; i < squareCount; i++)
      ((Graphics2D)g).draw(squares[i]);
  }

  public int getSquare(int x, int y) {
    for (int i = 0; i < squareCount; i++)
      if(squares[i].contains(x,y))
        return i;
    return -1;
  }

  public void add(int x, int y) {
    if (squareCount < Max) {
      squares[squareCount] = new Rectangle(x, y,SquareWidth,SquareWidth);
      currentSquareIndex = squareCount;
      squareCount++;
      repaint();
    }
  }

  public void remove(int n) {
    if (n < 0 || n >= squareCount)
      return;
    squareCount--;
    squares[n] = squares[squareCount];
    if (currentSquareIndex == n)
      currentSquareIndex = -1;
    repaint();
  }

  public void mouseMoved(MouseEvent evt) {
    int x = evt.getX();
    int y = evt.getY();

    if (getSquare(x, y) >= 0)
      setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
    else
      setCursor(Cursor.getDefaultCursor());
  }

  public void mouseDragged(MouseEvent evt) {
    int x = evt.getX();
    int y = evt.getY();  
      Graphics g = getGraphics();
      g.setXORMode(getBackground());

     g.drawLine(x,y,x,y);
   
      g.dispose();
    }
  

  public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setTitle("Uml Editor");
    frame.setSize(500, 500);
    frame.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });

    Container contentPane = frame.getContentPane();
    contentPane.add(new MouseDragActionPanel());

    frame.show();
  }
}
      



PM MAIL   Вверх
dorogoyIV
Дата 12.10.2010, 04:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



Код

package rects;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;

public class Main extends JFrame
{
 public Main()
 {
  setBounds(200, 200, 500, 500);
  setDefaultCloseOperation(3);
  add(new MyPanel());
 }

 public static void main(String [] args)
 {
  SwingUtilities.invokeLater(new Runnable()
  {
   public void run()
   {
    new Main().setVisible(true);
   }
  });
 }
}

class MyPanel extends JPanel
              implements MouseListener
{
 RectsGroup rg = new RectsGroup();

 MyPanel()
 {
  setLayout(null);
  addMouseListener(this);
 }

 public void paintComponent(Graphics g)
 {
  super.paintComponent(g);
  Vector <MyRect> v = rg.getRects();

  for(int i = 0; i < v.size() - 1; i += 2)
  {
   Point p1 = v.get(i).getCenter();
   Point p2 = v.get(i + 1).getCenter();
   g.drawLine(p1.x, p1.y, p2.x, p2.y);
  }
 }

 public void mouseClicked(MouseEvent e)
 {
  MyRect rect = new MyRect(rg);
  rect.setBounds(e.getX(), e.getY(), rect.getPreferredSize().width,
                                     rect.getPreferredSize().height);
  add(rect);
  validate();
  repaint();
 }
 public void mousePressed(MouseEvent e){}
 public void mouseReleased(MouseEvent e){}
 public void mouseEntered(MouseEvent e){}
 public void mouseExited(MouseEvent e){}
}

class MyRect extends JComponent
             implements MouseMotionListener, MouseListener
{
 Point start;
 RectsGroup rg;

 MyRect(RectsGroup rg)
 {
  this.rg = rg;
  setPreferredSize(new Dimension(50, 50));
  addMouseMotionListener(this);
  addMouseListener(this);
 }

 public void mouseMoved(MouseEvent e)
 {
  start = e.getPoint();
 }

 public void mouseDragged(MouseEvent e)
 {
  Point end = e.getPoint();
  Point p = getLocation();
  setLocation(end.x - start.x + p.x, end.y - start.y + p.y);
  getParent().repaint();
 }

 public void mouseClicked(MouseEvent e)
 {
  if(e.getButton() == MouseEvent.BUTTON3)
  {
   rg.add(this);
   getParent().repaint();
  }
 }
 public void mousePressed(MouseEvent e){}
 public void mouseReleased(MouseEvent e){}
 public void mouseEntered(MouseEvent e){}
 public void mouseExited(MouseEvent e){}

 public Point getCenter()
 {
  return new Point(getLocation().x + getWidth() / 2,
                   getLocation().y + getHeight() / 2);
 }

 public void paintComponent(Graphics g)
 {
  g.drawRect(0, 0, 49, 49);
 }
}

class RectsGroup
{
 private Vector <MyRect> v = new Vector <MyRect> ();

 public void add(MyRect rect)
 {
  v.add(rect);
 }

 public Vector <MyRect> getRects()
 {
  return v;
 }
}

квадраты можно таскать мышкой.
правой кнопкой добавляются линии.

PM MAIL   Вверх
biskot133
Дата 12.10.2010, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.10.2010

Репутация: нет
Всего: нет



thank you

и, пожалуйста, не могли бы вы сказать мне, как написать текст в рамке

Это сообщение отредактировал(а) biskot133 - 13.10.2010, 01:49
PM MAIL   Вверх
Skipy
Дата 12.10.2010, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

Репутация: 4
Всего: 16



Цитата(biskot133 @ 12.10.2010,  14:00)
доброе утро
Я пытался запустить этот проект и это то, что показывает мне не могли бы вы помочь что случилось
C:\test2>java Main
Exception in thread "main" java.lang.NoClassDefFoundError: Main (wrong name: rects/Main)

Вот тут все есть: http://www.skipy.ru/technics/likbez.html

P.S. Имхо, Вам не рисовать надо учиться, а с основами разбираться.


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
dorogoyIV
Дата 13.10.2010, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



Цитата(biskot133 @  12.10.2010,  14:00 Найти цитируемый пост)
и, пожалуйста, не могли бы вы сказать мне, как написать текст в рамке

конкретнее - как именно надо?
PM MAIL   Вверх
biskot133
Дата 13.10.2010, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.10.2010

Репутация: нет
Всего: нет



я видел ваш код это было действительно полезным, и я создал этот код. Теперь мне нужно, например, когда я хочу нажать на T, чтобы иметь возможность расположить любой текст в любом месте в кадр ... только, чтобы быть в состоянии написать что-нибудь и что будет храниться на раме и в случае ошибки я был быть в состоянии удалить текст

Благодарю вас за ваше время и вашу помощь!

Код



import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class DrawIII extends JFrame {
   private int topX, topY;
   private int width, height, shape;
   private int bottomX, bottomY;
   protected JLabel status;
   public static final int CIRCLE = 0,
                           OVAL = 1,
                           LINE = 2,
                           RECT = 3;

   public DrawIII()
   {
      super( "DrawIII" );
      topX = topY = 0;

      status = new JLabel();
      getContentPane().add( status, BorderLayout.SOUTH );

      addMouseListener( new MouseHandler( this ) );
      addKeyListener( new KeyHandler( this ) );
      setSize( 300, 150 );
      show();
   }

   public int getTopX() { return topX; }
   public int getTopY() { return topY; }
   public int getBottomX() { return bottomX; }
   public int getBottomY() { return bottomY; }
   public void setTopX( int x ) { topX = x; }
   public void setTopY( int y ) { topY = y; }
   public void setBottomX( int x ) { bottomX = x; }
   public void setBottomY( int y ) { bottomY = y; }
   public void setWidth( int w ) { width = w; }
   public void setHeight( int h ) { height = h; }

   public void paint( Graphics g )
   {
      if ( shape != LINE ) {
         topX = Math.min( topX, bottomX );
         topY = Math.min( topY, bottomY );
      }

      switch ( shape ) {
         case CIRCLE:
            g.drawOval( topX, topY, width, width );
            break;
         case OVAL:
            g.drawOval( topX, topY, width, height );
            break;
         case LINE:
            g.drawLine( topX, topY, bottomX, bottomY );
            break;
         case RECT:
            g.drawRect( topX, topY, width, height );
            break;
      }
   }

   public void setShape( int s ) { shape = s; }

   public static void main( String args[] )
   {
      DrawIII app = new DrawIII();
      app.addWindowListener(
         new WindowAdapter() {
            public void windowClosing( WindowEvent e )
            {
               System.exit( 0 );
            }
         }
      );
   }  
}

class MouseHandler extends MouseAdapter {
   private DrawIII draw;

   public MouseHandler( DrawIII d ) { draw = d; }

   public void mouseReleased( MouseEvent e )
   {
      draw.setBottomX( e.getX() );
      draw.setBottomY( e.getY() );
      draw.setWidth( Math.abs( draw.getTopX() -
                               draw.getBottomX() ) );
      draw.setHeight( Math.abs( draw.getTopY() -
                                draw.getBottomY() ) );
      draw.repaint();
   }

   public void mousePressed( MouseEvent e )
   {
      draw.setTopX( e.getX() );
      draw.setTopY( e.getY() );
   }
}

class KeyHandler extends KeyAdapter {
   private DrawIII draw;

   public KeyHandler( DrawIII d ) { draw = d; }

   public void keyTyped( KeyEvent e )
   {
      int s = DrawIII.CIRCLE;

      switch ( e.getKeyChar() ) {
         case 'c': case 'C':
            s = DrawIII.CIRCLE;
            draw.status.setText( "Circle" );
            break;
         case 'o': case 'O':
            s = DrawIII.OVAL;
            draw.status.setText( "Oval" );
            break;
         case 'r': case 'R':
            s = DrawIII.RECT;
            draw.status.setText( "Rectangle" );
            break;
         case 'l': case 'L':
            s = DrawIII.LINE;
            draw.status.setText( "Line" );
            break;
         default:
            draw.status.setText( "Circle" );
            break;
      }

      draw.setShape( s );
   }
}




PM MAIL   Вверх
dorogoyIV
Дата 13.10.2010, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



biskot133, если говоришь на английском, пиши лучше на нем тогда smile
OK. write me in english please. write me to personally profile. (sorry, I'm speak English very bad  smile )
как нибудь постараюсь разобраться ;)

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0582 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.