在Jlabel上实现简单的悬停效果

JME*_*JME 0 java swing colors jlabel mouselistener

我正在讨论一个侧面项目的一些想法,我想创建一个使用Java swing的GUI,它看起来不像来自Windows95.我正在努力的一个想法是使用JLabel作为按钮而不是标准的JButton.这样我就可以根据需要自定义悬停,拖动和移动效果.

研究MouseAdapter class应该允许我做我想做的一切,不幸的是我在实现悬停效果时遇到了一些麻烦,因为它JLabel似乎没有更新.我已经尝试通过调用直接更新帧,frame.update(getGraphics());但这似乎不像我认为的那样工作.

我可以就如何正确更新标签获得一些建议.

注意:这只是一个示例,没有花费精力来有效地组织代码

public class Window extends JFrame {
    /**
     * 
     */
    private static final long serialVersionUID = 5259700796854880162L;
    private JTextField textField;
    private JLabel lblNewLabel;
    static Window frame;
    int i = 0;

    public Window() {

        JPanel panel = new JPanel();
        getContentPane().add(panel, BorderLayout.CENTER);
        panel.setLayout(null);

        lblNewLabel = new JLabel("New label");
        lblNewLabel.setBackground(Color.LIGHT_GRAY);
        lblNewLabel.setBounds(137, 38, 114, 70);
        panel.add(lblNewLabel);
        lblNewLabel.addMouseListener(new LabelAdapter());

        textField = new JTextField();
        textField.setBounds(122, 119, 86, 20);
        panel.add(textField);
        textField.setColumns(10);

    }

    private class LabelAdapter extends MouseAdapter {
        @Override
        public void mouseClicked(MouseEvent e) {
            textField.setText(String.valueOf(i));
            i++;
        }

        @Override
        public void mouseEntered(MouseEvent e) {
            lblNewLabel.setBackground(Color.CYAN);

        }

        @Override
        public void mouseExited(MouseEvent e) {
            lblNewLabel.setBackground(Color.LIGHT_GRAY);
        }
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        frame = new Window();

        frame.setSize(900, 700);
        frame.setVisible(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

mKo*_*bel 5

  1. Window是名称的保留名称awt.Window,将此名称更改为例如MyWindow

  2. JPanel已实现FlowLayout,你不能NullLayout使用build_in LayoutManager,然后使用JFrame.pack()之前JFrame.setVisible在屏幕上正确调整大小

  3. JLabel 是透明的,通过使用来改变它 JLabel.setOpaque(true);

  4. 刷新Backgroung Color来自Mouse over/hover也不是没有可能JLabel.repaint()在混凝土中的最后一行代码mouse_event,repaint()在失踪JLabel API