mouseListener 只识别 JLabel
mouseListener only recognize JLabel
我在包含多个组件的 JPanel 上添加了一个 mouseListener。
为了测试 mouseListener,我只在进入和退出 jpanel 时设置了 Jpanel 的边框。
问题是,它只识别 jpanel 的 jlabels 上的鼠标事件,而不识别其他组件或主 jpanel 本身的鼠标事件。想不通为什么...
代码如下:
import javax.swing.JFrame;
public class compte2 extends javax.swing.JPanel {
public compte2() {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jButton2 = new javax.swing.JButton();
jPanel2 = new javax.swing.JPanel();
jLabel4 = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel();
jButton1 = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
setPreferredSize(new java.awt.Dimension(240, 160));
addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
formMouseEntered(evt);
}
public void mouseExited(java.awt.event.MouseEvent evt) {
formMouseExited(evt);
}
});
setLayout(new java.awt.BorderLayout());
jPanel1.setMinimumSize(new java.awt.Dimension(100, 56));
jPanel1.setPreferredSize(new java.awt.Dimension(400, 56));
jPanel1.setLayout(new java.awt.BorderLayout());
jLabel1.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel1.setText("CLUB");
jLabel1.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
jLabel1.setPreferredSize(new java.awt.Dimension(240, 28));
jPanel1.add(jLabel1, java.awt.BorderLayout.PAGE_START);
jLabel3.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel3.setText("ILLIMITE");
jLabel3.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
jLabel3.setPreferredSize(new java.awt.Dimension(190, 28));
jPanel1.add(jLabel3, java.awt.BorderLayout.CENTER);
jButton2.setIcon(new javax.swing.ImageIcon("C:\Users\pc\Downloads\icon\Pics\see.png")); // NOI18N
jButton2.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
jButton2.setMinimumSize(new java.awt.Dimension(28, 28));
jButton2.setPreferredSize(new java.awt.Dimension(28, 28));
jPanel1.add(jButton2, java.awt.BorderLayout.LINE_END);
add(jPanel1, java.awt.BorderLayout.PAGE_START);
jPanel2.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
jPanel2.setMinimumSize(new java.awt.Dimension(100, 28));
jPanel2.setPreferredSize(new java.awt.Dimension(400, 28));
jPanel2.setLayout(new java.awt.BorderLayout());
jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel4.setText("€");
jLabel4.setPreferredSize(new java.awt.Dimension(15, 28));
jPanel2.add(jLabel4, java.awt.BorderLayout.LINE_END);
jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
jLabel6.setText("0,00");
jLabel6.setMaximumSize(new java.awt.Dimension(50, 28));
jLabel6.setPreferredSize(new java.awt.Dimension(50, 28));
jPanel2.add(jLabel6, java.awt.BorderLayout.CENTER);
jButton1.setText("ENCAISSER");
jButton1.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
jButton1.setMinimumSize(new java.awt.Dimension(80, 28));
jButton1.setPreferredSize(new java.awt.Dimension(80, 28));
jPanel2.add(jButton1, java.awt.BorderLayout.LINE_START);
add(jPanel2, java.awt.BorderLayout.PAGE_END);
add(jScrollPane1, java.awt.BorderLayout.CENTER);
}// </editor-fold>
private void formMouseEntered(java.awt.event.MouseEvent evt) {
compte2 mc = (compte2)evt.getSource();
mc.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(204, 0, 0), 4));
}
private void formMouseExited(java.awt.event.MouseEvent evt) {
compte2 mc = (compte2)evt.getSource();
mc.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel6;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JScrollPane jScrollPane1;
// End of variables declaration
public static void main(String[] args) {
JFrame j = new JFrame();
compte2 mc = new compte2();
j.add(mc);
j.pack();
j.setVisible(true);
}
}
您的问题是您将子面板添加到主面板,您的事件没有按照您的预期生成。
向您的 mouseEntered/Exited 方法添加一些调试代码,以便您可以查看事件何时生成。
更改您的代码,为您的面板设置背景颜色,以便您可以在鼠标 enters/exits 面板时看到:
initComponents();
addMouseListener(this);
setBackground(Color.YELLOW);
我从不使用 IDE 生成代码,我不知道 GroupLayout 在做什么。所以你会得到奇怪的行为,因为子组件之间存在间隙。因此,当您在面板之间垂直移动鼠标时,您会看到变化。
按钮和标签已添加到子组件,因此如果您将鼠标水平放置在子面板上,它们不应生成事件。
我在包含多个组件的 JPanel 上添加了一个 mouseListener。 为了测试 mouseListener,我只在进入和退出 jpanel 时设置了 Jpanel 的边框。 问题是,它只识别 jpanel 的 jlabels 上的鼠标事件,而不识别其他组件或主 jpanel 本身的鼠标事件。想不通为什么...
代码如下:
import javax.swing.JFrame;
public class compte2 extends javax.swing.JPanel {
public compte2() {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jButton2 = new javax.swing.JButton();
jPanel2 = new javax.swing.JPanel();
jLabel4 = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel();
jButton1 = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
setPreferredSize(new java.awt.Dimension(240, 160));
addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
formMouseEntered(evt);
}
public void mouseExited(java.awt.event.MouseEvent evt) {
formMouseExited(evt);
}
});
setLayout(new java.awt.BorderLayout());
jPanel1.setMinimumSize(new java.awt.Dimension(100, 56));
jPanel1.setPreferredSize(new java.awt.Dimension(400, 56));
jPanel1.setLayout(new java.awt.BorderLayout());
jLabel1.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel1.setText("CLUB");
jLabel1.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
jLabel1.setPreferredSize(new java.awt.Dimension(240, 28));
jPanel1.add(jLabel1, java.awt.BorderLayout.PAGE_START);
jLabel3.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel3.setText("ILLIMITE");
jLabel3.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
jLabel3.setPreferredSize(new java.awt.Dimension(190, 28));
jPanel1.add(jLabel3, java.awt.BorderLayout.CENTER);
jButton2.setIcon(new javax.swing.ImageIcon("C:\Users\pc\Downloads\icon\Pics\see.png")); // NOI18N
jButton2.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
jButton2.setMinimumSize(new java.awt.Dimension(28, 28));
jButton2.setPreferredSize(new java.awt.Dimension(28, 28));
jPanel1.add(jButton2, java.awt.BorderLayout.LINE_END);
add(jPanel1, java.awt.BorderLayout.PAGE_START);
jPanel2.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
jPanel2.setMinimumSize(new java.awt.Dimension(100, 28));
jPanel2.setPreferredSize(new java.awt.Dimension(400, 28));
jPanel2.setLayout(new java.awt.BorderLayout());
jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel4.setText("€");
jLabel4.setPreferredSize(new java.awt.Dimension(15, 28));
jPanel2.add(jLabel4, java.awt.BorderLayout.LINE_END);
jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
jLabel6.setText("0,00");
jLabel6.setMaximumSize(new java.awt.Dimension(50, 28));
jLabel6.setPreferredSize(new java.awt.Dimension(50, 28));
jPanel2.add(jLabel6, java.awt.BorderLayout.CENTER);
jButton1.setText("ENCAISSER");
jButton1.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
jButton1.setMinimumSize(new java.awt.Dimension(80, 28));
jButton1.setPreferredSize(new java.awt.Dimension(80, 28));
jPanel2.add(jButton1, java.awt.BorderLayout.LINE_START);
add(jPanel2, java.awt.BorderLayout.PAGE_END);
add(jScrollPane1, java.awt.BorderLayout.CENTER);
}// </editor-fold>
private void formMouseEntered(java.awt.event.MouseEvent evt) {
compte2 mc = (compte2)evt.getSource();
mc.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(204, 0, 0), 4));
}
private void formMouseExited(java.awt.event.MouseEvent evt) {
compte2 mc = (compte2)evt.getSource();
mc.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel6;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JScrollPane jScrollPane1;
// End of variables declaration
public static void main(String[] args) {
JFrame j = new JFrame();
compte2 mc = new compte2();
j.add(mc);
j.pack();
j.setVisible(true);
}
}
您的问题是您将子面板添加到主面板,您的事件没有按照您的预期生成。
向您的 mouseEntered/Exited 方法添加一些调试代码,以便您可以查看事件何时生成。
更改您的代码,为您的面板设置背景颜色,以便您可以在鼠标 enters/exits 面板时看到:
initComponents();
addMouseListener(this);
setBackground(Color.YELLOW);
我从不使用 IDE 生成代码,我不知道 GroupLayout 在做什么。所以你会得到奇怪的行为,因为子组件之间存在间隙。因此,当您在面板之间垂直移动鼠标时,您会看到变化。
按钮和标签已添加到子组件,因此如果您将鼠标水平放置在子面板上,它们不应生成事件。