public class TabbedPaneDemo extends JPanel implements MouseListener {
  ...
  JPanel panel1 = new JPanel();
  panel1.addMouseListener(this);
  ...  public void mouseClicked(MouseEvent e) {}
  public void mousePressed(MouseEvent e) {}
  public void mouseReleased(MouseEvent e) {}
  public void mouseEntered(MouseEvent e) {}
  public void mouseExited(MouseEvent e) {}
}

解决方案 »

  1.   

    一个是 enrico(初学者)的方法,再就是使用内部类.在你的TabbedPaneDemo内部声明鼠标处理的类
    public class TabbedPaneDemo extends JPanel {
    ……
    ……
    上面是你的代码
    class MouseOperation implements MouseListener{
      public void mouseClicked(MouseEvent e) {}
      public void mousePressed(MouseEvent e) {}
      public void mouseReleased(MouseEvent e) {}
      public void mouseEntered(MouseEvent e) {}
      public void mouseExited(MouseEvent e) {}}
    你还可以继承MouseAdapter,这个你只需要重载你需要的方法,不用全部重载,而上面的
    即使你不需要也要全部把方法都实现了。
    class MouseOperation extends MouseAdapter{
    //你需要的方法可以是,上面5个方法中的任意几个,
    }
    上述两种处理方法只要选择其中一个就可以了。
    }
      

  2.   

    谢谢楼上诸位的参与,可能 JTabbedPane诸位没有用过,它是JComponent的一个子类,无法象普通的容器一样添加鼠标响应.诸位的代码我试过了,可通过编译,却无运行效果.请精通JFC的朋友给予帮助,不胜感激...
      

  3.   

    不知道你需要何种响应我做如下改动:
    1、
    实现mouselistener接口
    将JTabbedPane tabbedPane; JPanel panel1,panel2,panel3,panel4;作为属性
    如下:
    public class TabbedPaneDemo extends JPanel implements MouseListener {
    JTabbedPane tabbedPane;
        JPanel panel1,panel2,panel3,panel4;
        public TabbedPaneDemo() {
            super(new GridLayout(1, 1));        tabbedPane = new JTabbedPane();
            ImageIcon icon = createImageIcon("images/middle.gif");        panel1 = new JPanel();
            tabbedPane.addTab("Tab 1", icon, panel1,
                              "Does nothing");
            tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);
             
            tabbedPane.addMouseListener(this);
            add(tabbedPane);
          }2、
    实现接口方法,处理方法如下:
    public void mouseClicked(MouseEvent e) {
        
         if(tabbedPane.getSelectedComponent().equals(panel1)){
         System.out.println("p1");
         }
         if(tabbedPane.getSelectedComponent().equals(panel2)){
         System.out.println("p2");
         }
         if(tabbedPane.getSelectedComponent().equals(panel3)){
         System.out.println("p3");
         }
         if(tabbedPane.getSelectedComponent().equals(panel4)){
         System.out.println("p4");
         }
        
        }
      
    public void mousePressed(MouseEvent e) {}
    public void mouseReleased(MouseEvent e) {}
    public void mouseEntered(MouseEvent e) {}
    public void mouseExited(MouseEvent e) {}这样可以区分四个panel,并进行相应处理,程序运行通过,能够响应鼠标事件,不知道是不是你的目标。
      

  4.   

    E:\Myjava>javac TabbedPaneDemo.java
    TabbedPaneDemo.java:47: addMouseListener(java.awt.event.MouseListener) in java.a
    wt.Component cannot be applied to (TabbedPaneDemo)
            tabbedPane.addMouseListener(this);
                      ^
    1 errorE:\Myjava>_
    E:\Myjava>javac TabbedPaneDemo.java
    TabbedPaneDemo.java:69: cannot resolve symbol
    symbol  : variable panel1
    location: class TabbedPaneDemo
            if(tabbedPane.getSelectedComponent().equals(panel1)){
                                                        ^
    TabbedPaneDemo.java:69: cannot resolve symbol
    symbol  : variable tabbedPane
    location: class TabbedPaneDemo
            if(tabbedPane.getSelectedComponent().equals(panel1)){
               ^
    TabbedPaneDemo.java:72: cannot resolve symbol
    symbol  : variable panel2
    location: class TabbedPaneDemo
            if(tabbedPane.getSelectedComponent().equals(panel2)){
                                                        ^
    TabbedPaneDemo.java:72: cannot resolve symbol
    symbol  : variable tabbedPane
    location: class TabbedPaneDemo
            if(tabbedPane.getSelectedComponent().equals(panel2)){
               ^
    TabbedPaneDemo.java:75: cannot resolve symbol
    symbol  : variable panel3
    location: class TabbedPaneDemo
            if(tabbedPane.getSelectedComponent().equals(panel3)){
                                                        ^
    TabbedPaneDemo.java:75: cannot resolve symbol
    symbol  : variable tabbedPane
    location: class TabbedPaneDemo
            if(tabbedPane.getSelectedComponent().equals(panel3)){
               ^
    TabbedPaneDemo.java:78: cannot resolve symbol
    symbol  : variable panel4
    location: class TabbedPaneDemo
            if(tabbedPane.getSelectedComponent().equals(panel4)){
                                                        ^
    TabbedPaneDemo.java:78: cannot resolve symbol
    symbol  : variable tabbedPane
    location: class TabbedPaneDemo
            if(tabbedPane.getSelectedComponent().equals(panel4)){
               ^
    8 errorsE:\Myjava>_
    =======================================
    再次感谢大家的参与,希望大家能先编译一下最前面的代码再来解答.
    JTabbedPane的继承关系是Component->JComponent->JTabbedPane,mouselistener响应Component层.因为java是类单继承、接口多继承的语言,所以上面的所有修改都无效.
    我想实现的具体鼠标响应是在 panel1,panel2,panel3,panel4上用鼠标进行简单的图形绘制,并且当单击标签改变显示状态时,已绘制图形保持相对位置及大小不变.
      

  5.   

    JTabbedPane的继承关系是Component->JComponent->JTabbedPane,mouselistener响应Component层??
    ok,算我脾气不好,或者就当我水平不够,以后你的问题我绝对不参与。
      

  6.   

    楼主:
    因文件长没有全部拷贝,也请你看清代码再编译好么
    我肯定编译并且运行通过的再说一遍1、要实现mouselistener接口
    即public class TabbedPaneDemo extends JPanel implements MouseListener {
    不实现MouseListener当然出错
    TabbedPaneDemo.java:47: addMouseListener(java.awt.event.MouseListener) in java.a
    wt.Component cannot be applied to (TabbedPaneDemo)
            tabbedPane.addMouseListener(this);
                      ^
    1 error2、将JTabbedPane tabbedPane; JPanel panel1,panel2,panel3,panel4;作为属性
       而不是象原来那样定义在构造方法里
    如下:
    public class TabbedPaneDemo extends JPanel implements MouseListener {
        JTabbedPane tabbedPane;
        JPanel panel1,panel2,panel3,panel4;
        public TabbedPaneDemo() {
        }这样就不会出现
    TabbedPaneDemo.java:69: cannot resolve symbol
    symbol  : variable panel1
    location: class TabbedPaneDemo
            if(tabbedPane.getSelectedComponent().equals(panel1)){
    等错误了
      

  7.   

    算了,避免麻烦,还是全贴给你把/* 
     * TabbedPaneDemo.java is a 1.4 example that requires one additional file:
     *   images/middle.gif. 
     */
    //package TabbedPane;
    import javax.swing.JTabbedPane;
    import javax.swing.ImageIcon;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JFrame;
    import javax.swing.JComponent;
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.GridLayout;
    import java.awt.event.KeyEvent;
    import java.awt.event.*;public class TabbedPaneDemo extends JPanel implements MouseListener{

    JTabbedPane tabbedPane;
        JPanel panel1,panel2,panel3,panel4;
        public TabbedPaneDemo() {
            super(new GridLayout(1, 1));        tabbedPane = new JTabbedPane();
            ImageIcon icon = createImageIcon("images/middle.gif");        panel1 = new JPanel();
            tabbedPane.addTab("Tab 1", icon, panel1,
                              "Does nothing");
            tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);        panel2 = new JPanel();
            tabbedPane.addTab("Tab 2", icon, panel2,
                              "Does twice as much nothing");
            tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);        panel3 = new JPanel();
            tabbedPane.addTab("Tab 3", icon, panel3,
                              "Still does nothing");
        panel3.setPreferredSize(new Dimension(700, 500));
            tabbedPane.setMnemonicAt(2, KeyEvent.VK_3);        panel4 = new JPanel();
    panel4.setPreferredSize(new Dimension(410, 50));
            tabbedPane.addTab("Tab 4", icon, panel4,
                              "Does nothing at all");
            tabbedPane.setMnemonicAt(3, KeyEvent.VK_4);        //Add the tabbed pane to this panel.
            tabbedPane.addMouseListener(this);
            add(tabbedPane);
            
            //Uncomment the following line to use scrolling tabs.
            //tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
        }    public void mouseClicked(MouseEvent e) {
        
         if(tabbedPane.getSelectedComponent().equals(panel1)){
         System.out.println("p1");
         }
         if(tabbedPane.getSelectedComponent().equals(panel2)){
         System.out.println("p2");
         }
         if(tabbedPane.getSelectedComponent().equals(panel3)){
         System.out.println("p3");
         }
         if(tabbedPane.getSelectedComponent().equals(panel4)){
         System.out.println("p4");
         }
        
        }
      
    public void mousePressed(MouseEvent e) {}
    public void mouseReleased(MouseEvent e) {}
    public void mouseEntered(MouseEvent e) {}
    public void mouseExited(MouseEvent e) {}    
        
        
        /** Returns an ImageIcon, or null if the path was invalid. */
        protected static ImageIcon createImageIcon(String path) {
            java.net.URL imgURL = TabbedPaneDemo.class.getResource(path);
            if (imgURL != null) {
                return new ImageIcon(imgURL);
            } else {
                System.err.println("Couldn't find file: " + path);
                return null;
            }
        }    /**
         * Create the GUI and show it.  For thread safety,
         * this method should be invoked from the
         * event-dispatching thread.
         */
        private static void createAndShowGUI() {
            //Make sure we have nice window decorations.
            //JFrame.setDefaultLookAndFeelDecorated(true);        //Create and set up the window.
            JFrame frame = new JFrame("TabbedPaneDemo");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        //Create and set up the content pane.
            JComponent newContentPane = new TabbedPaneDemo();
            newContentPane.setOpaque(true); //content panes must be opaque
            frame.getContentPane().add(new TabbedPaneDemo(),
                                     BorderLayout.CENTER);        //Display the window.
            frame.pack();
            frame.setVisible(true);
        }    public static void main(String[] args) {
            //Schedule a job for the event-dispatching thread:
            //creating and showing this application's GUI.
            javax.swing.SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    createAndShowGUI();
                }
            });
        }
    }
      

  8.   

    要把事件处理独立出来也不难
    ==============================
    package gui;import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class Frame1
        extends JFrame {
      JPanel contentPane;
      BorderLayout borderLayout1 = new BorderLayout();
      JTabbedPane jTabbedPane1 = new JTabbedPane();
      JPanel jPanel1 = new JPanel();
      JPanel jPanel2 = new JPanel();
      JLabel jLabel1 = new JLabel();
      JLabel jLabel2 = new JLabel();  //Construct the frame
      public Frame1() {
        enableEvents(AWTEvent.WINDOW_EVENT_MASK);
        try {
          jbInit();
        }
        catch (Exception e) {
          e.printStackTrace();
        }
      }  //Component initialization
      private void jbInit() throws Exception {
        contentPane = (JPanel)this.getContentPane();
        contentPane.setLayout(borderLayout1);
        this.setSize(new Dimension(400, 300));
        this.setTitle("Frame Title");
        jLabel1.setText("jLabel1");
        jLabel2.setText("jLabel2");    // 自己写事件处理方法【宿主,托管机制】
        jPanel1.addMouseListener(new JPanelMouseAdapter(this));
        jPanel2.addMouseMotionListener(new JPanelMouseAdapter(this));    contentPane.add(jTabbedPane1, BorderLayout.CENTER);
        jTabbedPane1.add(jPanel1, "jPanel1");
        jPanel1.add(jLabel1, null);
        jTabbedPane1.add(jPanel2, "jPanel2");
        jPanel2.add(jLabel2, null);
      }  //Overridden so we can exit when window is closed
      protected void processWindowEvent(WindowEvent e) {
        super.processWindowEvent(e);
        if (e.getID() == WindowEvent.WINDOW_CLOSING) {
          System.exit(0);
        }
      }  void jPanel_mouseClicked(MouseEvent e) {
        jLabel1.setText(e.getX() + "||" + e.getY());
      }  void jPanel_mouseMoved(MouseEvent e) {
        jLabel2.setText(e.getX() + "+" + e.getY());
      }
    }
    class JPanelMouseAdapter
        implements java.awt.event.MouseListener, java.awt.event.MouseMotionListener {
      Frame1 adaptee;  JPanelMouseAdapter(Frame1 adaptee) {
        this.adaptee = adaptee;
      }  public void mouseClicked(MouseEvent e) {
        adaptee.jPanel_mouseClicked(e);
      }  public void mousePressed(MouseEvent e) {  }  public void mouseReleased(MouseEvent e) {  }  public void mouseEntered(MouseEvent e) {  }  public void mouseExited(MouseEvent e) {  }  public void mouseDragged(MouseEvent e) {  }  public void mouseMoved(MouseEvent e) {
        adaptee.jPanel_mouseMoved(e);
      }}///////////////////////////////////////////////以上JPanel事件处理类实现了两个接口,你需要处理什么类型的鼠标事件在对应的函数中写调用宿主的方法的就可以了。
      

  9.   

    感谢诸位不吝赐教,小弟初学JFC,贻笑大方之处还请海涵.谢谢诸位的参与.