Премини към съдържанието

Препоръчан отговор


Здравейте,

Тъй като предишният ми пост беше блокиран защото съм написал не както трябва заглавието създавам нов с по-добро име.Извинявам се предварително, че съм написал кода така и ще съм благодарен ако някой ми обясни как да сложа като другите в "прозорец"

Вече от половин година пиша на Java и съм направил някоя друга игричка, но има някои неща, които не се обясняват добре и не са ми ясни.Казват, че просто така се пишело, но ще ми е от полза ако някой може да ми обясни подробно това, което ще напиша какво прави.

 

package com.realtutsgml.src;
 
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.JPanel;
import javax.swing.Timer;
 
public class Game extends JPanel implements ActionListener{
 
private static final long serialVersionUID = 1L;
Timer gamelooptimer;
 
public Game(){
 
setFocusable(true);
gamelooptimer = new Timer(10,this);
gamelooptime.start();
}
 
public void paint(Graphics g){
 
Graphics2D g2d = (Graphics2D) g;
 
}
@Override
public void actionPerformed(ActionEvent e) {
repaint();
 
}
}
Редактирано от zOFFgam (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Здравейте !
 
Кода, в този си формат прави абсолютно нищо.
 
 

Здравейте,
Тъй като предишният ми пост беше блокиран защото съм написал не както трябва заглавието създавам нов с по-добро име.Извинявам се предварително, че съм написал кода така и ще съм благодарен ако някой ми обясни как да сложа като другите в "прозорец"
Вече от половин година пиша на Java и съм направил някоя друга игричка, но има някои неща, които не се обясняват добре и не са ми ясни.Казват, че просто така се пишело, но ще ми е от полза ако някой може да ми обясни подробно това, което ще напиша какво прави.

 

Прилагам inline коментарите с разяснения:

package com.realtutsgml.src;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JPanel;
import javax.swing.Timer;
//До тук са стандартни истории

public class Game extends JPanel implements ActionListener {
	//Създавате клас Game, който е JPanel (т.е. swing UI елемент, който може да се поставя във фреймове.
	//Правите и класа си ActionListener, което значи, че ще може да му закачате/абонирате action-и

	private static final long serialVersionUID = 1L;
	//Таймера си е ясен - през определено време извиква даден action/event, който се изпълнява.
	Timer gamelooptimer;

	public Game() {

		//Дава се възможност на панела да бъде фокусиран (с Tab или клик)
		setFocusable(true);
		//Създаване и стартиране на таймера - на 10 милисекунди ще вика метода actionPerformed на текущия обект.
		gamelooptimer = new Timer(10, this);
		gamelooptimer.start();
	}
	
	//Предефиниране на метода paint() - той се вика при изчертаване на елемента и в други случаи, описани в документацията му.
	public void paint(Graphics g) {
        //Кастваме graphics обекта (този, чрез който можем да изчертаваме елементи върху текущия панел) към 2D графичен обект.
		Graphics2D g2d = (Graphics2D) g;
		// И ... нищо не изчертаваме ...
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		//repaint се вика, когато елемента вече е показан и ние трябва експлицитно да го преизчертаем.
		//repaint() вътрешно изиква paint().
		repaint();

	}
}


Това нещо не се визуализира, не се и изпълнява (няма main метод).

 

Прилагам примерче с малко попроменен код, който да представи нагледно как се работи със swing:

package com.realtutsgml.src;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JPanel;
import javax.swing.Timer;

public class Game extends JPanel implements ActionListener {
	
	private int width = 20, height = 20, x = 20, y = 20;

	private static final long serialVersionUID = 1L;
	Timer gamelooptimer;

	public Game() {
		setFocusable(true);
		gamelooptimer = new Timer(500, this);
		gamelooptimer.start();
	}

	public void paint(Graphics g) {
		Graphics2D g2d = (Graphics2D) g;
                g2d.clearRect(x, y, width, height);
		x+=10;
		y+=10;
		g2d.setColor(Color.BLUE);
		g2d.fillOval(x, y, width, height);
		
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if (x < 400 && y < 400) {
			repaint();
		}
	}
}

И съответно един Main class, който да създава, изпълнява и визуализира примера и програмата:

package com.realtutsgml.src;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Rectangle;

import javax.swing.JFrame;

public class Main extends JFrame{
	private static final long serialVersionUID = -7979524330042563418L;
	private static final String TITLE = "Some";
	private static final int WINDOW_WIDTH = 800;
	private static final int WINDOW_HEIGHT = 600;
	private Game g;
	
	
	public Main() {
		init();
	}

	private void init() {
		BorderLayout l = new BorderLayout();
                setBackground(Color.WHITE);
		this.setLayout(l);
		setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
		g = new Game();
		g.setBounds(new Rectangle(new Dimension(WINDOW_WIDTH, WINDOW_HEIGHT)));
		this.add(g, BorderLayout.CENTER);
		// Create and set up the window.
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setTitle(TITLE);

		// Display the window.
		this.setVisible(true);
	}
	
	public static void main(String[] args) {
		java.awt.EventQueue.invokeLater(new Runnable() {
			public void run() {
				new Main();
			}
		});
		
	}
}

Поздрави !

Редактирано от soundtracker (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.