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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2010, 20:41   #1
Sasha9132
 
Аватар для Sasha9132
 
Регистрация: 16.11.2010
Сообщений: 7
По умолчанию JPanel объясните

Не могу понять как работает перерисовка. Основная суть - запустить окно и нарисовать картинку, а при нажатии изменить картинку на другую. Написал вот таких два класса, при запуске все нормально рисуется, а при нажатии нет никаких действий вообще.

Вот собственно быдлокод ;-):

Код HTML:
package main;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

public class Menu extends JPanel{

	private static final long serialVersionUID = 1L;
	
	public static final int WIDTH_BACK_GROUND = 0;
	public static final int HEIGHT_BACK_GROUND = 0;
	
	private Image backGround;
	private Image start, startSelect;
	
	
	Menu(){
		try{
			backGround = ImageIO.read(new File("BackGround.jpg"));
			start = ImageIO.read(new File("Start.gif"));
			startSelect = ImageIO.read(new File("StartSelect.gif"));
		} catch (IOException e){
			e.printStackTrace();
		}
		
		final ButtonMenu buttonStart = new ButtonMenu(start, startSelect, true);
		
		setLayout(null);
				
		buttonStart.setBounds(80, 80, 150, 20);
		add(buttonStart);

		addKeyListener(new KeyListener() {
			@Override
			public void keyTyped(KeyEvent e) {
				// TODO Auto-generated method stub
				if (e.getKeyCode() == KeyEvent.VK_UP){
					buttonStart.selectVisible(false);
					buttonStart.repaint();
					repaint();
				}
			}
			@Override
			public void keyReleased(KeyEvent e) {
				// TODO Auto-generated method stub
			}
			@Override
			public void keyPressed(KeyEvent e) {
				// TODO Auto-generated method stub
			}
		});
		setSize(800, 600);
		setVisible(true);
	}
	public void paintComponent(Graphics g){
		super.paintComponents(g);
		g.drawImage(backGround, WIDTH_BACK_GROUND, HEIGHT_BACK_GROUND, null);
	}
}
вот второй класс:

Код HTML:
package main;

import java.awt.Component;
import java.awt.Graphics;
import java.awt.Image;

public class ButtonMenu extends Component{
	private static final long serialVersionUID = 1L;

	private Image image1;
	private Image image2;
	private boolean visible;
	
	public ButtonMenu(Image image1, Image image2, boolean visible){
		this.image1 = image1;
		this.image2 = image2;
		this.visible = visible;
	}
	
	public void paint(Graphics g){
		if (visible == true){
			g.drawImage(image1, 0, 0, null);
		}
		else {
			g.drawImage(image2, 0, 0, null);
		}
	}

	public void selectVisible(boolean select){
		this.visible = select;
	}
}
вот main метод:

Код HTML:
public static void main(String[] args) {
         SwingUtilities.invokeLater(new Runnable(){
	            public void run(){
                             new Menu();
                    }
         }
}
Буду рад любому совету по теме :-)

P.S. Вроде говорят, что KeyListener нужно добавлять ко всем компонентам, тогда какая то охинея получается. Не могу понять тогда как он работать будет. Если у кого есть код решающий такую проблему буду рад если дадите глянуть.
Лишь тот достоин жизни и свободы, кто каждый день за них идет на бой... И. В. Гете

Последний раз редактировалось Sasha9132; 30.11.2010 в 09:40.
Sasha9132 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JPanel grimm_jow Общие вопросы по Java, Java SE, Kotlin 6 30.11.2010 18:59
Jpanel в JscrollPane Jakethefish Общие вопросы по Java, Java SE, Kotlin 0 15.11.2010 14:25
Использование метода repaint() объекта класса JPanel Alexcomeback Общие вопросы по Java, Java SE, Kotlin 1 31.10.2010 13:12
Объясните Alexsssandr Помощь студентам 2 17.02.2010 20:50
Объясните Sergo(1) Помощь студентам 2 10.05.2009 22:46