当鼠标使用摇摆时我如何调整大小?

时间:2014-03-18 00:20:28

标签: java swing jlabel

我正在尝试调整MouseEnter上的标签大小,但在MouseExit上,我希望它恢复到之前的状态。我该怎么做?

我希望标签在鼠标悬停时更大,但当鼠标退出时,标签将恢复正常尺寸。

有人可以向我解释如何做到这一点吗? 如果有可能,我希望看到缓慢调整大小。

这是代码:

    package kk
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridLayout;

import javax.swing.GroupLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;


import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;


public class ScrollGroup extends JPanel {

private static final int N = 8;
    private static final int NN = N * N;
    private static final int GAP = 5;
    private static final int SIZE = 100;

    public ScrollGroup() {
        this.setLayout(new GridLayout(N, N, GAP, GAP));
        for (int i = 0; i < NN; i++) {
        final    JLabel label = new JLabel();
            label.setOpaque(true);
            label.setBackground(Color.getHSBColor((float) i / NN, 1, 1));
            label.setPreferredSize(new Dimension(SIZE, SIZE));
            this.add(label);
            label.addMouseListener(new MouseAdapter()  {
        public void mouseEntered(MouseEvent e){

        }
        public void mouseExited(MouseEvent e) {

        }

    });            
        }
    }

    private void display() {
        JFrame f = new JFrame("ScrollGroup");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JScrollPane sp = new JScrollPane(this);
        GroupLayout layout = new GroupLayout(f.getContentPane());
        f.setLayout(layout);
        layout.setAutoCreateGaps(true);
        layout.setAutoCreateContainerGaps(true);
        layout.setHorizontalGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup().addComponent(sp)));
        layout.setVerticalGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup().addComponent(sp)));
        f.pack();
        f.setSize(N * SIZE, N * SIZE);
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new ScrollGroup().display();
            }
        });
    }
}

1 个答案:

答案 0 :(得分:1)

  

我试图在MouseEntred中调整标签大小,

定义&#34;调整大小&#34;。

您正在使用GridLayout将JLabel添加到面板。所有标签都已设置为面板可用空间允许的最大尺寸,那么您希望调整大小做什么?

如果您希望标签显示更大,那么您可以为每个标签指定MatteBorder。您可以将MatteBorder制作成您想要的任何尺寸,然后将颜色设置为等于面板的背景颜色。

如果您想要设置动画,那么您可以使用Swing Timer。在鼠标#ntered中启动Timer。每次定时器触发时,你都要将MatteBorder更改为pixedl,直到大小为零,然后停止定时器。在mouseExited上,您只需恢复默认边框。

有关详细信息,请参阅How to Use TimersHow to Use Borders上的Swing教程中的部分。