编辑 2
这应该是您的答案,我在调试时注意到,当我单击框架上的空白区域时,我会得到一个名称为组件的组件,"null.contentPane"
因此我将其置于条件中并且它起作用了!,我希望我有所帮助。
public class PanelsListener extends JFrame {
public static void main(String[] args) {
PanelsListener pl = new PanelsListener();
pl.setSize(700, 700);
pl.setLayout(new FlowLayout());
JPanel fp = new JPanel();
fp.setName("First");
fp.setSize(200, 200);
fp.setBorder(new LineBorder(Color.red));
JPanel sp = new JPanel();
sp.setName("Second");
sp.setSize(200, 200);
sp.setBorder(new LineBorder(Color.blue));
pl.add(fp);
pl.add(sp);
pl.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
JPanel pnl = (JPanel) javax.swing.SwingUtilities
.getDeepestComponentAt((PanelsListener) e.getSource(),
e.getX(), e.getY());
if (pnl != null && (!pnl.getName().equals("null.contentPane"))) {
String name = pnl.getName();
if (name != null) {
if (name.equals("First")) {
pl.setSize(500, 500);
} else if (name.equals("Second")) {
pl.setSize(800, 800);
}
pl.repaint();
}
}
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
});
pl.setVisible(true);
}
}
编辑 1
正如我从您的评论中了解到的,请尝试以下操作:
public class PanelsListener extends JFrame{
public static int panel_identifier=0;
public static void main(String[] args) {
PanelsListener pl = new PanelsListener();
pl.setSize(700, 700);
pl.setLayout(new FlowLayout());
JPanel fp=new JPanel();
fp.setSize(200,200);
fp.setBorder(new LineBorder(Color.red));
JPanel sp=new JPanel();
sp.setSize(200,200);
sp.setBorder(new LineBorder(Color.blue));
pl.add(fp);
pl.add(sp);
//panel_identifier is used to specify which panel has been clicked.
fp.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent me) {
pl.panel_identifier=1;
pl.mouseClicked(me);
}
});
sp.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent me) {
pl.panel_identifier=2;
pl.mouseClicked(me);
}
});
pl.setVisible(true);
}
protected void mouseClicked(MouseEvent me) {
if(panel_identifier==1)
{
this.setSize(500, 500);
panel_identifier=0;
}
else if(panel_identifier==2)
{
this.setSize(800, 800);
panel_identifier=0;
}
}
}
正常解决方案
公共类 PanelsListener 扩展 JFrame {
public static void main(String[] args) {
PanelsListener pl = new PanelsListener();
pl.setSize(700, 700);
pl.setLayout(new FlowLayout());
pl.add(new FirstPanel(pl));
pl.add(new SecondPanel(pl));
pl.setVisible(true);
}
}
class FirstPanel extends JPanel {
public FirstPanel(Frame frm) {
setBorder(new LineBorder(Color.red));
setSize(200, 200);
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
frm.setSize(500, 500);
frm.repaint();
}
});
addMouseMotionListener(new MouseAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
// do some action when mouse dragged over this panel
}
});
}
}
class SecondPanel extends JPanel {
public SecondPanel(Frame frm) {
setBorder(new LineBorder(Color.blue));
setSize(200, 200);
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
frm.setSize(800,800);
frm.repaint();
}
});
addMouseMotionListener(new MouseAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
// do some action when mouse dragged over this panel
}
});
}
}