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) {}
}
...
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) {}
}
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个方法中的任意几个,
}
上述两种处理方法只要选择其中一个就可以了。
}
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,并进行相应处理,程序运行通过,能够响应鼠标事件,不知道是不是你的目标。
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上用鼠标进行简单的图形绘制,并且当单击标签改变显示状态时,已绘制图形保持相对位置及大小不变.
ok,算我脾气不好,或者就当我水平不够,以后你的问题我绝对不参与。
因文件长没有全部拷贝,也请你看清代码再编译好么
我肯定编译并且运行通过的再说一遍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)){
等错误了
* 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();
}
});
}
}
==============================
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事件处理类实现了两个接口,你需要处理什么类型的鼠标事件在对应的函数中写调用宿主的方法的就可以了。