как продолжить фиксировать событие

 
 
 
Сообщения:16
Здравствуйте. Помогите пожалуйста, как продолжить фиксировать (обрабатывать событие)
например есть
JPanel pan1; pan1.setLocation(10, 10); pan1.setSize(100, 100);
JPanel pan2; pan2.setLocation(10, 10); pan2.setSize(100, 100);
то есть одна панель закрывает другую, если они обе подписаны на событие нажатия мышки , то по нажатию мышки событие произойдет в верхней, а как сделать чтобы событие произошло в обеих.
 
 
Сообщения:1052
Swing?
с событиями клавиатуры можно. погугли KeyboardEventDispatcher. с мышкой не уверен. попробуй передавать события вручную. если выйдет слишком сложно - оберни всё в JavaFX там есть прозрачный слой, на котором можно ловить события. а дальше разводить их вручную.
 
 
Сообщения:16
так че то совсем не понял, про что вы. Может мне и так пойдет. Я как то делал просто забыл, вообщем можно как то указать чтобы событие не останавливалось на первом зарегистрированном объекте, а продолжало "опускаться" или "подыматься" и тогда его будут регистрировать (срабатывать) все обработчики.
Если можно про свой способ по подробнее, на что гуглить?
 
 
Сообщения:10008
Sanhai:
Я как то делал просто забыл, вообщем можно как то указать чтобы событие не останавливалось на первом зарегистрированном объекте, а продолжало "опускаться" или "подыматься"
Речь про Event Bubbling наверно?
 
 
Сообщения:16
а тоже самое но только на русском можно?

вот код: нужно чтобы событие клик мыши генерировался в обоих компонента "одновременно" то есть не только в том компоненте который выше pan1 но и в том который под ним jobPan_test

фаил 1Ваш текст
package Osnova;

import Sobitija.glav_pan;

public class NachStartTest {

public static void main(String args[]){
System.out.println("В кассе NachStartTest");
glav_pan objglav_pan = new glav_pan();
objglav_pan.narisovat();
}//public static void main(String args[]){

}//public class NachStartTest {

фаил 2
package Sobitija;

import java.awt.Color;

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

public class glav_pan extends JFrame{

public glav_pan(){
super("Окно игры 2");
System.out.println("В классе glav_pan в конструкторе glav_pan");
setLayout(null);
setSize(900, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setLocationRelativeTo(null);
}//

public void narisovat(){
Pan_test jobPan_test = new Pan_test();
JPanel pan1 = jobPan_test.narisovat_pan1();
jobPan_test.setSize(200, 200);
jobPan_test.setLocation(50, 50);
jobPan_test.setLayout(null);
jobPan_test.setBackground(Color.BLUE);
jobPan_test.setName("jobPan_test");
add(jobPan_test);
SobitijaEvent objSobitijaEvent = new SobitijaEvent();
jobPan_test.addMouseListener(objSobitijaEvent);
pan1.addMouseListener(objSobitijaEvent);
}//
}//

фаил 3
package Sobitija;

import java.awt.Color;

import javax.swing.JPanel;

public class Pan_test extends JPanel{

public JPanel narisovat_pan1(){
JPanel pan1 = new JPanel();
pan1.setSize(200, 200);
pan1.setLocation(50, 50);
pan1.setLayout(null);
pan1.setBackground(Color.BLACK);
add(pan1);
pan1.setName("pan1");
return pan1;
}//
}//

фаил 4
package Sobitija;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.JPanel;

public class SobitijaEvent implements MouseListener, MouseMotionListener, ActionListener{

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
String nameObj = null;
Pan_test objPan_test = new Pan_test();
if(objPan_test.getClass() == e.getSource().getClass()){
objPan_test = (Pan_test)e.getSource();
nameObj = objPan_test.getName();
}//
JPanel pan1 = new JPanel();
if(pan1.getClass() == e.getSource().getClass()){
pan1 = (JPanel)e.getSource();
nameObj = pan1.getName();
}//
System.out.println("В классе SobitijaEvent в методе mouseClicked");
System.out.println("Имя объекта " + nameObj);
}

@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub

}

}
Ваш текст
 
 
Сообщения:1052
что за игру ты делаешь? может посоветую как подойти к проблеме. а то несколько панелей друг над дружкой звучит слишком усложнённо.
 
 
Сообщения:16
да стратегию :) типа планетс но тока про вторую мировую, проблема нужно чтобы JPanel или JLabel привязывались к курсору, когда в основной панели возникает событие mouseClicked(MouseEvent e){ к основной панели (JPanel osnov_pan) добавляется объект например JLabel lab_polk (osnov_pan.add(lab_polk, 0)). Далее в mouseMoved(MouseEvent e){ if(lab_polk != null) lab_polk.setLocation(e.getPoint) } то есть я определяю координаты объекта JLabel и перемещаю его с курсором, но как только курсор попадает на объект который "прекращает" (не генерирует) действия события на панели osnov_pan, например на этой же панели есть кнопка JButton то само собой объект lab_polk остается на последнем определенном месте и тем более не хочет двигаться по кнопке JButton. я как то дела чтобы события продолжали генерироваться в других объектах "с низу", и забыл :) а щасс и гуглу вопрос задать не могу, про JvaScript много всего вылезает, а про java нету :)
 
 
Сообщения:1052
ничего не понял.
чем у тебя является каждая из панелей и почему их должно быть много?
 
 
Сообщения:16
ну я для себя определил основную панель, которая на весь экран, потом например добавил на нее панель с низу, где можно выбрать юнит или отображается информация о хексе (или гексе) как его там :), я в методе Paint() все рисовать пробовал, но из за большого объема как то не получается не удобно. все панели у меня setLayout(null) так что удобно размещать все в ручную. например панель юнит, это само сабой панель юнит, на ней панели трех лини 1. основные войск 2. резервные войск 3. вспомогательные войска (штаб дивизии), это все на панели юнит :), а в каждой панели линии JLabel которая графически представляет полк. и вот стоят они с верху вниз линии, и в них с права налево полки, и ждут когда на один из полков я мышкой кликну, а потом перетяну в новый юнит в новую линию :). Ну как щасс понятней (я шучу)? Вот и борюсь с проблемой.

Так то есть решения закидываеш на мою основную панел, панель перетаскивания (JPanel pan_per) самой верхней и добавляешь в нею объект для перетаскивания, после таскаешь куда надо, а потом по клику убираешь панел перетаскивания (JPanel pan_per), и опрашиваешь все объекты (ну в пределах разумного :)) находится ли в них курсор, там где курсор там будем считать и произошло событие клик мыши, если этот объект должен что то делать с объектом который перетаскивался, он с ним чего то и делает, просто извращаться не хочется.
Я тут подумал а все что я делаю не есть извращения? :)
 
 
Сообщения:1052
что-то в сторону варгейма.
тут лучше просто рисовать. подход простой - каждый предмет на карте и каждая клетка знают где они стоят и как их рисовать, а карта знает только кого надо рисовать и что клетки надо рисовать до юнитов. плюс есть глобальный объект "камера" который хранит "смещение нулевой точки экрана относительно нулевой точки карты"
с нажатием мышки всё просто а с переносом немного сложнее: во первых нельзя рисовать переносимый юнит вместе с другими юнитами (или рисовать, но по дргому, полупрозрачным или силуэтом) а во вторых когда рисуешь этот юнит - то его позиция для прорисовки зависит не то его позиции на карте и позиции камеры, а от позиции мыши.
 
 
Сообщения:16
Спасибо большое, ну принципиально у меня все как вы описали, просто все гораздо сложнее, вот с объектом камера это интересно, я иначе по извращался, наверное с камерой было бы удобнее. у меня проблема с переносом в том состоит, что переносимый объект(ты) получает координаты размещения из объекта MouseEvent (из координат события) а как только мышка наедет на какую нибудь кнопку событие движение мышки не произойдет. Вот в этом то и состоит проблема. Ну я что бы простоя не было дальше пошел, выше описанным способом, пока вроде проблем с быстродействием нету :), ну пока нету :)
Огромное спасибо за помощь.
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет