1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
package testslowrepaint;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TestSlowRepaint extends JFrame
{
private static final int NB_BOXES = 204;
private JPanel contentPanel;
private boolean allSelected;
public TestSlowRepaint()
{
contentPanel = new JPanel(new GridLayout(0, 6)); // 6 columns, and as many rows as needed
setContentPane(contentPanel);
// Tile with many boxes
for (int i = 0; i < NB_BOXES; i++)
{
contentPanel.add(new MyBox());
}
// A key press will select or unselect all boxes
addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
toggleSelectAll();
}
});
setPreferredSize(new Dimension(800, 600));
pack();
}
private void toggleSelectAll()
{
allSelected = !allSelected;
for (Component c : contentPanel.getComponents())
{
((MyBox) c).setSelected(allSelected);
}
}
public static void main(String[] args)
{
final TestSlowRepaint app = new TestSlowRepaint();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
java.awt.EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
app.setVisible(true);
}
});
}
// ---------------------------------------------------------------------------------------
// MyBox class
// ---------------------------------------------------------------------------------------
private final class MyBox extends JPanel
{
public MyBox()
{
setBorder(BorderFactory.createLineBorder(Color.BLUE, 1));
setSelected(false);
}
public void setSelected(boolean b)
{
setBackground(b ? Color.YELLOW : Color.GRAY);
}
}
} |
Partager