我正在尝试调整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();
}
});
}
}
答案 0 :(得分:1)
我试图在MouseEntred中调整标签大小,
定义&#34;调整大小&#34;。
您正在使用GridLayout将JLabel添加到面板。所有标签都已设置为面板可用空间允许的最大尺寸,那么您希望调整大小做什么?
如果您希望标签显示更大,那么您可以为每个标签指定MatteBorder
。您可以将MatteBorder制作成您想要的任何尺寸,然后将颜色设置为等于面板的背景颜色。
如果您想要设置动画,那么您可以使用Swing Timer
。在鼠标#ntered中启动Timer。每次定时器触发时,你都要将MatteBorder更改为pixedl,直到大小为零,然后停止定时器。在mouseExited上,您只需恢复默认边框。
有关详细信息,请参阅How to Use Timers和How to Use Borders上的Swing教程中的部分。