Java 尝试使用Mouselistener向JPanel添加标签

Java 尝试使用Mouselistener向JPanel添加标签,java,swing,jpanel,mouseevent,jlabel,Java,Swing,Jpanel,Mouseevent,Jlabel,所以,我试图使它这样,当选择“名字”或“姓氏”并且在palettePane中按下鼠标时,带有我的名字或姓氏的标签会出现在mouseX或mouseY上。这就是我所能做到的,我被难住了。有什么想法吗 以下是设置: public class benNameFunc extends JPanel implements ActionListener, MouseListener{ private final JRadioButton firstName; private final JRadi

所以,我试图使它这样,当选择“名字”或“姓氏”并且在palettePane中按下鼠标时,带有我的名字或姓氏的标签会出现在mouseX或mouseY上。这就是我所能做到的,我被难住了。有什么想法吗

以下是设置:

public class benNameFunc extends JPanel implements ActionListener, MouseListener{




private final JRadioButton firstName;


private final JRadioButton lastName;



private final JButton deleteButton;

private JLabel firstNameLabel;

 int x; 
 int y;

int firstOrLast = 1;

public benNameFunc(){

    lastName = new JRadioButton("Last Name");
    lastName.setPreferredSize(new Dimension(100, 50));
    lastName.setForeground(Color.RED);
    lastName.setActionCommand("last");
    lastName.setSelected(false);

    firstName = new JRadioButton("First Name");
    firstName.setPreferredSize(new Dimension(100, 50));
    firstName.setForeground(Color.RED);
    firstName.setActionCommand("first");
    firstName.setSelected(true);


    JPanel palettePane = new JPanel(new BorderLayout());
    palettePane.setPreferredSize(new Dimension (800, 500));

    add(palettePane, BorderLayout.CENTER);

    firstNameLabel = new JLabel("Ben");     
    firstNameLabel.setPreferredSize(new Dimension(100, 10));
    firstNameLabel.setForeground(Color.WHITE);
    firstNameLabel.setVisible(true);
    palettePane.add(firstNameLabel);

    buttonPane.setBackground(Color.BLACK);

     firstName.addActionListener(this);
     lastName.addActionListener(this);
     deleteButton.addActionListener(this);

     palettePane.addMouseListener(this);



}
然后是操作代码:

public void actionPerformed(ActionEvent e) {

    if (e.getActionCommand() == "first") {
        firstOrLast = 1;
    } else if (e.getActionCommand() == "last") {
        firstOrLast = 2;
    } else if (e.getSource() == deleteButton){
        firstOrLast = 3;
    }

}


public void mousePressed(MouseEvent e) {


    x = e.getX(); 
    y = e.getY();

    switch (firstOrLast) {
    case 1:  
        firstNameLabel.setLocation(x, y);

    break;
    case 2: 

    break;
    case 3:

    break;
    default: 
    break;
}

  • palettePane
    当前由布局管理器控制,这意味着任何更改位置的尝试都很可能在容器重新验证时失败或被取代…将其布局管理器设置为
    null
  • 当你想做自己的布局控制时,使用
    preferredSize
    是没有帮助的。相反,您需要使用components
    setSize
    方法来代替…
    firstnamelab.setSize(firstnamelab.getPreferredSize())
  • 您的
    字符串
    比较错误
  • 例如,你正在做

    if (e.getActionCommand() == "first") {
        firstOrLast = 1;
    } else if (e.getActionCommand() == "last") {
        firstOrLast = 2;
    } else if (e.getSource() == deleteButton) {
        firstOrLast = 3;
    }
    
    if (e.getActionCommand().equals("first")) {
        firstOrLast = 1;
    } else if (e.getActionCommand().equals("last")) {
        firstOrLast = 2;
    } else if (e.getSource() == deleteButton) {
        firstOrLast = 3;
    }
    
    当你应该做

    if (e.getActionCommand() == "first") {
        firstOrLast = 1;
    } else if (e.getActionCommand() == "last") {
        firstOrLast = 2;
    } else if (e.getSource() == deleteButton) {
        firstOrLast = 3;
    }
    
    if (e.getActionCommand().equals("first")) {
        firstOrLast = 1;
    } else if (e.getActionCommand().equals("last")) {
        firstOrLast = 2;
    } else if (e.getSource() == deleteButton) {
        firstOrLast = 3;
    }
    
    警告

    null
    布局本来就很难,而且会出现问题。确保这是你真正想要做的

    示例

    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.EventQueue;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JRadioButton;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
    import javax.swing.border.LineBorder;
    
    public class TestNameClick {
    
        public static void main(String[] args) {
            new TestNameClick();
        }
    
        public TestNameClick() {
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    try {
                        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    }
    
                    JFrame frame = new JFrame("Testing");
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setLayout(new BorderLayout());
                    frame.add(new BenNameFunc());
                    frame.pack();
                    frame.setLocationRelativeTo(null);
                    frame.setVisible(true);
                }
            });
        }
    
        public class BenNameFunc extends JPanel implements ActionListener, MouseListener {
    
            private final JRadioButton firstName;
            private final JRadioButton lastName;
    //        private final JButton deleteButton;
            private JLabel firstNameLabel;
            int x;
            int y;
            int firstOrLast = 1;
    
            public BenNameFunc() {
    
                lastName = new JRadioButton("Last Name");
                lastName.setPreferredSize(new Dimension(100, 50));
                lastName.setForeground(Color.RED);
                lastName.setActionCommand("last");
                lastName.setSelected(false);
    
                firstName = new JRadioButton("First Name");
                firstName.setPreferredSize(new Dimension(100, 50));
                firstName.setForeground(Color.RED);
                firstName.setActionCommand("first");
                firstName.setSelected(true);
    
    
                JPanel palettePane = new JPanel(new BorderLayout());
                palettePane.setLayout(null);
                palettePane.setPreferredSize(new Dimension(800, 500));
    
                add(palettePane, BorderLayout.CENTER);
    
                firstNameLabel = new JLabel("Ben...");
                firstNameLabel.setSize(firstNameLabel.getPreferredSize());
    //            firstNameLabel.setForeground(Color.WHITE);
    //            firstNameLabel.setVisible(true);
                palettePane.add(firstNameLabel);
    
    //            buttonPane.setBackground(Color.BLACK);
    
                firstName.addActionListener(this);
                lastName.addActionListener(this);
    //            deleteButton.addActionListener(this);
    
                palettePane.addMouseListener(this);
    
    
    
            }
            public void actionPerformed(ActionEvent e) {
    
                if (e.getActionCommand().equals("first")) {
                    firstOrLast = 1;
                } else if (e.getActionCommand().equals("last")) {
                    firstOrLast = 2;
    //            } else if (e.getSource() == deleteButton) {
    //                firstOrLast = 3;
                }
    
            }
    
            public void mousePressed(MouseEvent e) {
                x = e.getX();
                y = e.getY();
    
                switch (firstOrLast) {
                    case 1:
                        firstNameLabel.setLocation(x, y);
                        break;
                    case 2:
                        break;
                    case 3:
                        break;
                    default:
                        break;
                }
            }
    
            @Override
            public void mouseClicked(MouseEvent e) {
            }
    
            @Override
            public void mouseReleased(MouseEvent e) {
            }
    
            @Override
            public void mouseEntered(MouseEvent e) {
            }
    
            @Override
            public void mouseExited(MouseEvent e) {
            }
        }
    }
    

    我所看到的主要问题是你的
    调色板
    窗格由布局管理器控制,无法帮助创建任何图像,不知道,为了获得更好的帮助,请尽快在JLabel(添加到JPanel)中发布一个简短的、可编译的、几乎是MouseListener的帖子@MadProgrammer我试图进行绝对定位,但是帕莱特潘甚至不会出现。@mKorbel我没有办法做一个SSCE。我使用的每台计算机都受到限制,并且都有间谍软件。我的代码用于实现1和2。在它们下面,由于某种原因,palettPane不存在。
    palettPane
    窗格需要将其布局管理器设置为null,而不是它所在的容器。。。