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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как соединить точки линией ? 
:(
    Опции темы
Qawra
Дата 21.12.2008, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Если  GUI   должен быть прописан отдельно  то 
я хочу понять  как  лучше прописать метод  для прорисовки точек    ...drawLine(x,y,x,y)  или какой-нибудь другой 
 на этом листочке в клеточку :
Код
import java.awt.Canvas;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

class GridsCanvas extends Canvas 
{
  int width, height;
  int rows;
  int cols;

  GridsCanvas(int w, int h, int r, int c) 
  {
    setSize(width = w, height = h);
    rows = r;
    cols = c;
  }

  public void paint(Graphics g) 
  {
    int i;
    width = getSize().width;
    height = getSize().height;

    // draw the rows
    int rowHt = height / (rows);
    for (i = 0; i < rows; i++)
      g.drawLine(0, i * rowHt, width, i * rowHt);

    // draw the columns
    int rowWid = width / (cols);
    for (i = 0; i < cols; i++)
      g.drawLine(i * rowWid, 0, i * rowWid, height);
  }
}

public class Grids extends Frame 
{
  
  Grids(String title, int w, int h, int rows, int cols) // constractor
  {
    setTitle(title);

    // Now create a Canvas and add it to the Frame.
    GridsCanvas canvas = new GridsCanvas(w, h, rows, cols);
    
    add(canvas);

    addWindowListener(new WindowAdapter() 
    {
      public void windowClosing(WindowEvent e)
      {
        setVisible(false);
        setResizable(false);
        dispose();
        System.exit(0);
      }
    });

    pack();
  }

  public static void main(String[] a) {
    new Grids("BattleGraund", 800, 800, 30, 30).setVisible(true);
  }
}



Как  потом точки можно соединить линией того же цвета ?
Ясно что нужен отдельный класс .




PM MAIL   Вверх
SoulKeeper
Дата 21.12.2008, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.1.2007
Где: Ukraine, Lviv.

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



Пример с точками, кликайте по решетке.

Код

package gui.points.vingrad;

import javax.swing.*;
import java.awt.*;
import java.awt.geom.Point2D;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

class GridsCanvas extends Panel {

    int rows;
    int cols;

    GridsCanvas(int r, int c) {
        rows = r;
        cols = c;
    }

    public void paint(Graphics g) {
        g.setColor(Color.WHITE);
        super.paint(g);
        g.setColor(Color.BLACK);

        int i;
        int width = getSize().width;
        int height = getSize().height;
        // draw the rows
        int rowHt = height / (rows);
        for (i = 0; i < rows; i++)
            g.drawLine(0, i * rowHt, width, i * rowHt);
        // draw the columns
        int rowWid = width / (cols);
        for (i = 0; i < cols; i++)
            g.drawLine(i * rowWid, 0, i * rowWid, height);

        // Enable antialiased drawing :) Looks better.
        Graphics2D g2d = (Graphics2D) g;
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        // Draw points and lines
        Component prevComponent = null;
        for(Component component : getComponents()){
            component.paint(g);

            if(prevComponent != null){
                Color oldColor = g.getColor();
                g.setColor(Color.MAGENTA);
                g.drawLine(prevComponent.getX(), prevComponent.getY(), component.getX(), component.getY());
                g.setColor(oldColor);
            }

            prevComponent = component;
        }
    }
}

class DrawablePoint extends Component{

    private Color color;
    private int radius;

    DrawablePoint(Color color, int radius) {
        this.color = color;
        this.radius = radius;
    }

    @Override
    public void paint(Graphics g) {

        Color oldColor = null;
        if(color != null){
            oldColor = g.getColor();
            g.setColor(color);
        }

        g.fillOval(getX() - radius, getY() - radius, radius * 2, radius * 2);

        if(oldColor != null){
            g.setColor(oldColor);
        }
    }

    public Color getColor() {
        return color;
    }

    public void setColor(Color color) {
        this.color = color;
    }

    public int getRadius() {
        return radius;
    }

    public void setRadius(int radius) {
        this.radius = radius;
    }
}

public class Grids extends Frame {

    Grids(String title, int w, int h, int rows, int cols) // constractor
    {        
        setTitle(title);
        // Now create a Canvas and add it to the Frame.
        GridsCanvas canvas = new GridsCanvas(rows, cols);
        canvas.setPreferredSize(new Dimension(w, h));

        // Ad mouse listener to canvas, lets make it react on clics
        canvas.addMouseListener(new MouseAdapter(){
            @Override
            public void mouseClicked(MouseEvent e) {
                GridsCanvas canvas = (GridsCanvas) e.getSource();
                Point clickPoint = e.getPoint();
                DrawablePoint drawablePoint = new DrawablePoint(Color.RED, 5);
                drawablePoint.setLocation(clickPoint);
                canvas.add(drawablePoint);
                canvas.repaint();
            }
        });


        add(canvas);
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                int exitCode = JOptionPane.showConfirmDialog(Grids.this, "Exit " + getTitle() + "?", "Confirm exit", JOptionPane.YES_NO_OPTION);
                if (exitCode == JOptionPane.OK_OPTION) {
                    System.exit(0);
                }
            }
        });
        pack();

        //Set this windown in the center
        setLocationRelativeTo(null);

        // Set it not resizable
        setResizable(false);
    }

    public static void main(String[] a) {
        new Grids("BattleGraund", 800, 800, 30, 30).setVisible(true);
    }
}

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


Бывалый
*


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

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



Здорово !!!
Я счастлива  видеть как это работает ! 
По условиям игры там будут два игрока 
которые ставят точки по очереди каждый своим цветом .
Я сейчас попробую написать класс Players 
где игроки будут выбирать себе цвет чернил .
Потом надо будет модифицировать код что-бы он не рисовал точки автоматически( с двумя игроками получиться каша из линий ) а только когда игрок поставит свою точку и дважды щёлкнет по точке с которой он её захочет соединить .
Нам сказали что программный код надо писать отдельно от GUI ( в отдельных классах ) .
Как вы думаете , если у меня будет стартовое окно игры то можно именно его считать GUI а всё остальное считать программным кодом ?

P.S.
У меня BlueJ не признаёт package gui.points.vingrad;
отказывается c ним компилировать  . Мне пришлось его отключить :(

PM MAIL   Вверх
SoulKeeper
Дата 22.12.2008, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.1.2007
Где: Ukraine, Lviv.

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



Цитата(Qawra @  22.12.2008,  16:26 Найти цитируемый пост)
Как вы думаете , если у меня будет стартовое окно игры то можно именно его считать GUI а всё остальное считать программным кодом ?


По хорошему логика и GUI должны быть разделены.
Что-бы было легче понять что именно надо - представьте ситуацию когда:

1). У вас есть ядро игрушки
2). Игрушка отображается с помошью GUI
3). Игрушка отображается как интернет страничка
4). В игрушку можно играть с консоли.

Т.е. пункты 2-4 это способы отображения пункта 1. 
Один и тот-же .jar файл с ядром должен быть показан 3-мя разными способами.


Цитата(Qawra @  22.12.2008,  16:26 Найти цитируемый пост)
У меня BlueJ не признаёт package gui.points.vingrad;

Это моё... Приципилось случайно.


Это сообщение отредактировал(а) SoulKeeper - 22.12.2008, 17:03
PM MAIL   Вверх
Qawra
Дата 22.12.2008, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Я просто удивляюсь как количество классов растёт . Для игры достаточно 4 : Points ,Players, Battlefield  , Games ( с main  методом )
Попытавшись нарисовать интерфейс я уже написала 5 или 6 классов а интерфейса пока в принципе и нет.. Что-то  принципиально не правильно .Может быть я просто на каждый класс отдельный файл выделяю а их надо обьединять ..
PM MAIL   Вверх
SoulKeeper
Дата 22.12.2008, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.1.2007
Где: Ukraine, Lviv.

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



Цитата(Qawra @  22.12.2008,  17:28 Найти цитируемый пост)
Я просто удивляюсь как количество классов растёт

Вам классов жалко?


Цитата(Qawra @  22.12.2008,  17:28 Найти цитируемый пост)
Для игры достаточно 4 : Points ,Players, Battlefield  , Games ( с main  методом )

не достаточно


Цитата(Qawra @  22.12.2008,  17:28 Найти цитируемый пост)
Попытавшись нарисовать интерфейс я уже написала 5 или 6 классов а интерфейса пока в принципе и нет.. Что-то  принципиально не правильно .

Не правильно - это когда винигрет, все в одном.


Цитата(Qawra @  22.12.2008,  17:28 Найти цитируемый пост)
я просто на каждый класс отдельный файл выделяю а их надо обьединять .. 

Кто это сказал что надо объединять? Больше кода - круче программа? Или надо писать так что-бы потом никто не разобрался?

Не даром же придуманы пространства имен, классы, интерфейсы и прочие вещи упрощающие жизнь программисту. Вы же пытаетесь ее себе максимально усложнить.
PM MAIL   Вверх
Qawra
Дата 22.12.2008, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



пока в окошке BlueJ  классы можно будет размещать - буду их по отдельности писать  smile 
Кстати у меня сейчас  работа встала потому что
BlueJ не пропускает  public void mouseEntered (MouseEvent e) Говорит что illegal start of expression 
Я пытаюсь добавить кнопки на стартовое окно и посмотреть как они там изобразятся  .
Код

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.lang.Object ;
import java.io.Serializable;
import java.awt.Graphics;

public class  MyGui extends JFrame implements Serializable, MouseListener,ChangeListener, FocusListener
    {
     private JPanel main,south,north,center;
     private JButton startButton ,firstPlayerButton,secondPlayerButton;
     private JLabel titleLabel;
     
    public MyGui(String title)  // constractor which would be used to create MainWindow
    {   super (title);  // super means that we use constractor from  parent  JFrame class 
        build();
    }
    private void build()
     {
        north = new JPanel(new FlowLayout(FlowLayout.LEFT));
        south = new JPanel(new FlowLayout(FlowLayout.RIGHT));
        center = new JPanel(new FlowLayout(FlowLayout.LEFT));
        
        main = new JPanel(new BorderLayout());
        
        this.add(main);
        main.add(south,BorderLayout.SOUTH);
        main.add(north,BorderLayout.NORTH);
        main.add(center,BorderLayout.CENTER);
        
        startButton=new JButton("Start");
        firstPlayerButton= new JButton (" First Player");
        secondPlayerButton = new JButton (" Second Player");
        
        startButton.addMouseListener(this);
        firstPlayerButton.addMouseListener(this);
        secondPlayerButton.addMouseListener(this);
        
        center.add(startButton);
        north.add(firstPlayerButton);
        north.add(secondPlayerButton);
        
        Font myFont =  new Font("Verdana",Font.BOLD+Font,24);        
        titleLabel = new JLabel("title");
        titleLabel.setFont(myFont);
        
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setDefaultCloseOperation(HIDE_ON_CLOSE);
        this.setSize(600,600);
        this.setResizable(false);
        this.setVisible(true);        
    }
    public void mouseClicked(MouseEvent e){
        if (e.getSource().equals(startButton))
         { 
         } else if (e.getSource().equals(firstPlayerButton))
         {
         }  else if (e.getSource().equals(secondPlayerButton))
         {
         } 
         public void mouseEntered (MouseEvent e)
         {
         }  
         public void mouseExited(MouseEvent e)
         {
         } 
         public void mousePressed(MouseEvent e)
         {
         } 
         public void mouseReleased(MouseEvent e)
         {
         }          
}


public class MainWindow
{ public static void main (String args[])
  {
    MyGui window  = new MyGui (" Paper BattleGround  v 1"); 

  }
}    


Почему так происходит ? Я что-то упустила ?

Это сообщение отредактировал(а) Qawra - 22.12.2008, 18:20
PM MAIL   Вверх
SoulKeeper
Дата 22.12.2008, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.1.2007
Где: Ukraine, Lviv.

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



Код

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.Serializable;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class MyGui extends JFrame implements Serializable, MouseListener, ChangeListener, FocusListener {

  private JPanel main, south, north, center;

  private JButton startButton, firstPlayerButton, secondPlayerButton;

  private JLabel titleLabel;

  public MyGui(String title) // constractor which would be used to create MainWindow
  {
    super(title); // super means that we use constractor from parent JFrame class
    build();
  }

  private void build() {
    north = new JPanel(new FlowLayout(FlowLayout.LEFT));
    south = new JPanel(new FlowLayout(FlowLayout.RIGHT));
    center = new JPanel(new FlowLayout(FlowLayout.LEFT));

    main = new JPanel(new BorderLayout());

    this.add(main);
    main.add(south, BorderLayout.SOUTH);
    main.add(north, BorderLayout.NORTH);
    main.add(center, BorderLayout.CENTER);

    startButton = new JButton("Start");
    firstPlayerButton = new JButton(" First Player");
    secondPlayerButton = new JButton(" Second Player");

    startButton.addMouseListener(this);
    firstPlayerButton.addMouseListener(this);
    secondPlayerButton.addMouseListener(this);

    center.add(startButton);
    north.add(firstPlayerButton);
    north.add(secondPlayerButton);

    Font myFont = new Font("Verdana", Font.BOLD, 24);
    titleLabel = new JLabel("title");
    titleLabel.setFont(myFont);

    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setSize(600, 600);
    this.setResizable(false);
    this.setVisible(true);
  }

  public void mouseClicked(MouseEvent e) {
    if (e.getSource().equals(startButton)) {
    } else if (e.getSource().equals(firstPlayerButton)) {
    } else if (e.getSource().equals(secondPlayerButton)) {
    }
  }

  public void mouseEntered(MouseEvent e) {
  }

  public void mouseExited(MouseEvent e) {
  }

  public void mousePressed(MouseEvent e) {
  }

  public void mouseReleased(MouseEvent e) {
  }

  public void stateChanged(ChangeEvent e) {
    // TODO Auto-generated method stub

  }

  public void focusGained(FocusEvent e) {
    // TODO Auto-generated method stub

  }

  public void focusLost(FocusEvent e) {
    // TODO Auto-generated method stub

  }

  public static void main(String args[]) {
    MyGui window = new MyGui(" Paper BattleGround  v 1");
  }
}


Будет работать...
PM MAIL   Вверх
Qawra
Дата 22.12.2008, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибочки большое !Всё заработало .
 Теперь буду пробовать привести кнопки в дизайнерский вид . Так их оставлять нельзя потому что в игре интерфейс очень важен .Надо будет передвинуть их и приукрасить  .Может быть картинка какая-нибудь подойдёт для фона.
Из tutorials знаю что нужен для таких вещей отдельный интерфасе 
Код

public interface CustomLook
{
   public abstract void NotifyStartPaint();
   public abstract void CustomPaint ();
}


и   новый  дизайн здесь  кодировать примерно так
Код

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

public class NewButton extends JFrame implements CustomLook
{
   public void NotifyStartPaint()
   {

   }
      public void CustomPaint ()
    {

    }
 }


Правда ли это лучший путь  ?
В tutorials  иногда бывает что-то недосказано поэтому  применить их не всегда получается. Хотела я вчера посмотреть как будет выглядеть полупрозрачная панель . Долго и без особых результатов прикручивала этот код к центральной панели .
Код

public class NewPanel extends JPanel 
{

    public NewPanel() {
        setOpaque(false);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        Graphics2D graphics2D = (Graphics2D) g;

        graphics2D.setColor(Color.BLUE);
        graphics2D.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.2f));
        graphics2D.fillRect(0, 0, getWidth(), getHeight());
    }
}


 
Ничего не получилось .Что-то было упущено изначально.

Я передвинула кнопки на другие панели и внешний вид совершенно преобразился .
Код

main.add(startButton);
south.add(firstPlayerButton);
south.add(secondPlayerButton);


Всю центральную панель теперь занимает кнопка Start  smile
Какие эффекты доступны для шрифта надписи на кнопке ? 
Можно ли  сделать надпись крупными вращающимися буквами  или это уже не Java а Flash ?
Мне надо что-бы кнопка  firstPlayerButton  была на south
панели слева  . Сейчас  она прижалась к secondPlayerButton в правом нижнем углу  .Что нужно добавить что-бы её подвинуть влево ?


Это сообщение отредактировал(а) Qawra - 22.12.2008, 19:38
PM MAIL   Вверх
SoulKeeper
Дата 23.12.2008, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.1.2007
Где: Ukraine, Lviv.

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



Цитата

Можно ли  сделать надпись крупными вращающимися буквами  или это уже не Java а Flash 


Самый простой способ - GIF картинка.

Цитата

Что нужно добавить что-бы её подвинуть влево ?


Почитайте про LayoutManager"ы

Это сообщение отредактировал(а) SoulKeeper - 23.12.2008, 13:07
PM MAIL   Вверх
Qawra
Дата 24.12.2008, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Читаю пока про LayoutManager и круглые кнопки  smile 
Не получается избавить главное окошко программы от кофейной чашки .Метод который я нашла здесь  на форуме 
this.setUndecorated(true);
не помог . Я думаю потому что я импортировала что-то лишнее когда создавала окно .Наверно надо убрать awt
и вписать его swing аналоги..
Код

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Frame;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.Serializable;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;


PM MAIL   Вверх
SoulKeeper
Дата 24.12.2008, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.1.2007
Где: Ukraine, Lviv.

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



setUndecorated() всю рамку заберет...

setIconImage(ваша иконка)

Это сообщение отредактировал(а) SoulKeeper - 24.12.2008, 15:21
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.0621 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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