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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2015, 11:11   #1
Sharof
Новичок
Джуниор
 
Регистрация: 08.09.2015
Сообщений: 3
По умолчанию Помогите исправить ошибку

Мне надо чтобы на экране появились два движущихся объекта, пока что я смог написать программу только для одного. Чтоб одним управлять с помощью клавиатуры а другой двигался сам.
Проблема в этом коде в классе MovableObject в строке 41 ( b.addKeyListener(new Frame()); ), можете ли вы мне помочь, Спасибо!

Код:
import javax.swing.JButton;
import javax.swing.JFrame;

public class Frame extends JFrame {

public static JButton b = new JButton();
private static final long serialVersionUID = 1L;

public static void main(String[] args) {

Frame f = new Frame();
f.setSize(300, 300);
f.setDefaultCloseOperation(3);
f.setLocationRelativeTo(null);
f.setLayout(null);
f.setVisible(true);
MovableObject m = new MovableObject();
m.Obj();
m.add(Frame.b);
}
}


________________________________________________________________


import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JButton;

public class MovableObject implements KeyListener{

private static final long serialVersionUID = 1L;
public static JButton b = new JButton();

private static int x = 100;
private static int y = 100;
private final int width = 100;
private final int height = 100;


public void keyTyped(KeyEvent e) {}

public void keyPressed(KeyEvent e) {

if(e.getKeyCode()==KeyEvent.VK_UP){
moveUP();
}
if(e.getKeyCode()==KeyEvent.VK_DOWN){
moveDOWN();
}
if(e.getKeyCode()==KeyEvent.VK_LEFT){
moveLEFT();
}
if(e.getKeyCode()==KeyEvent.VK_RIGHT){
moveRIGHT();
}

}

public void keyReleased(KeyEvent e) {}

public void Obj(){

b.setBounds(x, y, width, height);
b.addKeyListener(new Frame());

}

public void moveUP(){

b.setBounds(x, y-=100, width, height);
b.repaint();

}
public void moveDOWN(){

b.setBounds(x, y+=100, width, height);
b.repaint();

}
public void moveLEFT(){

b.setBounds(x-=100, y, width, height);
b.repaint();

}
public void moveRIGHT(){

b.setBounds(x+=100, y, width, height);
b.repaint();

}

public void add(JButton b2) {
// TODO Auto-generated method stub

}

}

Последний раз редактировалось Stilet; 08.09.2015 в 11:48.
Sharof вне форума Ответить с цитированием
Старый 08.09.2015, 11:49   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А текст ошибки? Или ошибки нет?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.09.2015, 12:02   #3
Sharof
Новичок
Джуниор
 
Регистрация: 08.09.2015
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А текст ошибки? Или ошибки нет?
The method addKeyListener(KeyListener) in the type Component is not applicable for the arguments (Frame)

вот что пишет
Sharof вне форума Ответить с цитированием
Старый 08.09.2015, 12:28   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Дык разве Frame является наследником класса KeyListener?
Правильно он ругается. Убирай Frame создание оттудлова.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.09.2015, 12:40   #5
Sharof
Новичок
Джуниор
 
Регистрация: 08.09.2015
Сообщений: 3
По умолчанию

Код:
public void Obj(){
    	
    	b.setBounds(x, y, width, height);
    	b.addKeyListener(null);
    	
    }
что то вроде этого ?

Смотри вот так оно работает, а когда я их разделяю на два класса у меня уже получается ошибка.
Код:

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Frame extends JFrame implements KeyListener{
	
	public static JButton b = new JButton();
	private static final long serialVersionUID = 1L;
	
	private static int x = 100;
    private static int y = 100;
    private final int width = 100;
    private final static int height = 100;

	public static void main(String[] args) {

    	Frame f = new Frame();
    	f.setSize(300, 300);
    	f.setDefaultCloseOperation(3);
    	f.setLocationRelativeTo(null);
    	f.setLayout(null);
    	f.setVisible(true);
    	f.Obj();
    	f.add(Frame.b);
    	
    }
	
	 public void Obj(){
	    	
	    	b.setBounds(x, y, width, height);
	    	b.addKeyListener(new Frame());
	    	
	    }
	
	 public void keyTyped(KeyEvent e) {}
	    
	    public void keyPressed(KeyEvent e) {
		        
	    	if(e.getKeyCode()==KeyEvent.VK_UP){
	    		moveUP();
	    	}
	    	if(e.getKeyCode()==KeyEvent.VK_DOWN){
	    		moveDOWN();
	    	}
	    	if(e.getKeyCode()==KeyEvent.VK_LEFT){
	    		moveLEFT();
	    	}
	    	if(e.getKeyCode()==KeyEvent.VK_RIGHT){
	    		moveRIGHT();
	    	}
	    	
	    }
	    
	    public void keyReleased(KeyEvent e) {}
	    
	    public void moveUP(){
	    	
	    	b.setBounds(x, y-=100, width, height);
	    	b.repaint();
	    	
	    }
	    public void moveDOWN(){
	    	
	    	b.setBounds(x, y+=100, width, height);
	    	b.repaint();
	    	
	    }
	    public void moveLEFT(){
	    	
	    	b.setBounds(x-=100, y, width, height);
	    	b.repaint();
	    	
	    }
	    public void moveRIGHT(){
	    	
	    	b.setBounds(x+=100, y, width, height);
	    	b.repaint();
	    	
	    }
}

Последний раз редактировалось Stilet; 08.09.2015 в 13:21.
Sharof вне форума Ответить с цитированием
Старый 08.09.2015, 13:25   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
вот так оно работает, а когда я их разделяю на два класса у меня уже получается ошибка.
Ну так сравни что ты пишешь:
Код:
b.addKeyListener(null);
и
Код:
b.addKeyListener(new Frame());
Тебе в этот метод нужно не Фрейм передавать созданный, а объект класса KeyListener.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите исправить ошибку dimons009 Общие вопросы C/C++ 1 16.05.2015 16:36
Помогите исправить ошибку! prizrakbarci Помощь студентам 5 15.10.2014 14:45
Помогите исправить Ошибку Pavelhr Помощь студентам 1 16.01.2010 11:35
Помогите исправить ошибку Ortega Общие вопросы C/C++ 6 04.06.2009 22:39
Помогите исправить ошибку sergoss Общие вопросы Delphi 2 14.02.2009 09:59