Как после размещения собственной компоненты на панель получить доступ к свойствам панели? Иными словами, я создал свой класс, который отрисовывает себя. В составе класса определил обработчик события, скажем, перетаскивание компонента мышью. Теперь хотелось бы отследить свойства панели, на которой расположен мой объект, чтобы строить поведение объекта в соответствии с поведением панели-владельца объектом. Можно ли (конечно можно, но как?) влиять на поведение объекта-владельца с помощью расположенного на нем собственного компонента: изменить его свойство, вызвать его метод ? | Код | import javax.swing.*; import java.awt.*; import java.awt.event.*;
class MyComponent extends JComponent { /* наш базовый компонент */ public MyComponent() { super(); setPreferredSize(new Dimension(200, 200)); /* выделяем объекту какое-то размер */ setBounds(10,10,120,120); /* и как-то располагаем его на экране */
addMouseMotionListener(new java.awt.event.MouseMotionAdapter() /* ОБРАБОТЧИК СОБЫТИЙ */ { Point oldPosition; /* старая точка */ public void mouseMoved(java.awt.event.MouseEvent e) /* обработчик события простого передвижения */ { oldPosition = e.getPoint(); /* позиция курсора мыши до момента нажатия кнопки мыши */ } public void mouseDragged(java.awt.event.MouseEvent e) { Component comp = e.getComponent(); /* объект для извлечения координат владельца этого компонента */ Point newPosition = e.getPoint(); /* находим новые координаты курсора мыши */ if(oldPosition != null) { Point loc = comp.getLocation(); /* извлекаем координады владельца объекта */ /* здесь решается вооброс о новой позиции объекта */
/*!!!!!!!! ЗДЕСЬ ХОТЕЛОСЬ БЫ 1) ПОЛУЧИТЬ СВОЙСТВА КОМПОНЕНТА-ВЛАДЕЛЬЦА ЭТОГО ОБЪЕКТА 2) ПОВЛИЯТЬ НА СВОЙСТВА КОМПОНЕНТА-ВЛАДЕЛЬЦА 3) МОЖЕТ БЫТЬ ПОВЛИЯТЬ НА СВОЙСТВА КАКОГО-НИБУДЬ ЕЩЕ КОМПОНЕНТА !!!!!!!!*/ comp.setLocation(newPosition.x - (oldPosition.x - loc.x),newPosition.y - (oldPosition.y - loc.y)); } } });
} public void paintComponent(Graphics g) { super.paintComponent(g); g.drawRect(10,10,100,100); } }
public class Test0 { JPanel jPanel1;
public static void main(String[] args) {
new Test0();
/* < 1 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< */ /* javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { try { // UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel"); } catch ( Exception ex ) {} // showForm(); } }); /* > 1 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> */ }
public Test0() { jPanel1 = new JPanel(); jPanel1.setLayout(null);
JMenuBar menubar = new JMenuBar(); JMenu menu = new JMenu("Menu"); JMenu menu1 = new JMenu("Second menu"); JMenuItem menuitem = new JMenuItem("Menu item"); menu.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ; } }); JMenuItem eXit = new JMenuItem("Exit"); eXit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); JMenuItem mmx = new JMenuItem("Добавить"); mmx.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { MyComponent myComponent = new MyComponent(); jPanel1.add( myComponent ); jPanel1.repaint(); } });
// MyComponent myComponent = new MyComponent();
//jPanel1 = new JPanel(); //jPanel1.setLayout(null);
menu.add(menuitem); menu1.add(mmx); menu.addSeparator(); menu.add(eXit); menubar.add(menu); menubar.add(menu1);
//jPanel1.add( menubar ); //jPanel1.add( myComponent );
JFrame frame = new JFrame("HelloWorldSwing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(jPanel1); frame.setJMenuBar(menubar); frame.setSize(300, 300);
//try { // // UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); // UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel"); // } catch ( Exception ex ) {} // // showForm();
frame.setVisible(true);
} }
|
|