public JComponent getUI(){
JPanel panel=new JPanel();
mainPanel.add(panel,BorderLayout.CENTER);
panel.setLayout(new GridLayout(2,1));
panel.add(bomBox);
bomBox.setBackground(Color.white);
Font f=new Font("SansSerif", Font.BOLD, 18);
bomBox.setFont(f);
bomBox.setOpaque(true);
JPanel subpanel=new JPanel();
subpanel.setLayout(new GridLayout(subtasks.size(),1));
panel.add(subpanel);
for(Map.Entry<Integer,SubTaskLabel> subs:subtasks.entrySet()){
JRadioButton box=new JRadioButton();
box.setText(subs.getValue().getLevel()+"."+subs.getValue().getContent());
subpanel.add(box);
box.setBackground(Color.white);
box.setOpaque(true);
}
panel.setBorder(LineBorder.createGrayLineBorder());
mainPanel.add(controlpanel,BorderLayout.EAST);
// mainPanel.addMouseMotionListener(new MouseMotionAdapter(){
//
//// public void mouseEntered(MouseEvent e) {
//// System.out.println("mousemovein");
//// controlpanel.setVisible(true);
//// //mainPanel.updateUI();
//// //mainPanel.repaint();
//// }
////
//// public void mouseExited(MouseEvent e) {
//// controlpanel.setVisible(false);
//// //mainPanel.updateUI();
//// //mainPanel.repaint();
//// }
//
// public void mouseMoved(MouseEvent e){
// System.out.println("x="+e.getX()+";y="+e.getY());
// }
//
// });
//mainPanel.setOpaque(true);
return mainPanel;
}我写的组件中,有个部分是一个JPanel中上半部分是JComboBox,下半部分是一组JRadioButton.然后我想
监听鼠标在这个JPanel中的移动,并作出相应的处理(标注掉的部分).但实际测试的时候,不管怎么动,后台
都不输出坐标,只有在JPanel边缘移动时,才会输出坐标.请高手指点,如何侦听已经填加满组件的JPanel上的
鼠标移动?
JPanel panel=new JPanel();
mainPanel.add(panel,BorderLayout.CENTER);
panel.setLayout(new GridLayout(2,1));
panel.add(bomBox);
bomBox.setBackground(Color.white);
Font f=new Font("SansSerif", Font.BOLD, 18);
bomBox.setFont(f);
bomBox.setOpaque(true);
JPanel subpanel=new JPanel();
subpanel.setLayout(new GridLayout(subtasks.size(),1));
panel.add(subpanel);
for(Map.Entry<Integer,SubTaskLabel> subs:subtasks.entrySet()){
JRadioButton box=new JRadioButton();
box.setText(subs.getValue().getLevel()+"."+subs.getValue().getContent());
subpanel.add(box);
box.setBackground(Color.white);
box.setOpaque(true);
}
panel.setBorder(LineBorder.createGrayLineBorder());
mainPanel.add(controlpanel,BorderLayout.EAST);
// mainPanel.addMouseMotionListener(new MouseMotionAdapter(){
//
//// public void mouseEntered(MouseEvent e) {
//// System.out.println("mousemovein");
//// controlpanel.setVisible(true);
//// //mainPanel.updateUI();
//// //mainPanel.repaint();
//// }
////
//// public void mouseExited(MouseEvent e) {
//// controlpanel.setVisible(false);
//// //mainPanel.updateUI();
//// //mainPanel.repaint();
//// }
//
// public void mouseMoved(MouseEvent e){
// System.out.println("x="+e.getX()+";y="+e.getY());
// }
//
// });
//mainPanel.setOpaque(true);
return mainPanel;
}我写的组件中,有个部分是一个JPanel中上半部分是JComboBox,下半部分是一组JRadioButton.然后我想
监听鼠标在这个JPanel中的移动,并作出相应的处理(标注掉的部分).但实际测试的时候,不管怎么动,后台
都不输出坐标,只有在JPanel边缘移动时,才会输出坐标.请高手指点,如何侦听已经填加满组件的JPanel上的
鼠标移动?
c.addMouseMotionListener(...);
}
最方便的做法
MouseMotionAdapter mma = new MouseMotionAdapter() {
....
};
panel.addMouseMotionListener(mma);
addAllMouseMotionListener(panel, mma);void addAllMouseMotionListener(Container con, MouseMotionAdapter mma) {
for (Component c : panel.getComponents()) { //容器上的所有组件
if (c instanceof Container) { //该组件是容器的话
addAllMouseMotionListener(c, mma); //递归
}
c.addMouseMotionListener(mma);
}
}
把你Jpanel上的所有组件加上监听