Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.Dimension;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.util.Random;
- // by rutera
- import javax.swing.AbstractAction;
- import javax.swing.ButtonGroup;
- import javax.swing.JButton;
- import javax.swing.JFrame;
- import javax.swing.JLabel;
- import javax.swing.JPanel;
- import javax.swing.JRadioButton;
- import javax.swing.JTable;
- import javax.swing.SwingUtilities;
- import javax.swing.table.AbstractTableModel;
- import javax.swing.table.TableCellRenderer;
- public class IsEDTExample extends JPanel {
- private boolean keepRunning;
- private static int RED = 0;
- private static int BLUE = 1;
- private static int GREEN = 2;
- private static int VARIABLE = 3;
- private static int SIZE = 3;
- private int threadShade;
- private ColorTableModel tableModel= new ColorTableModel();
- private Thread colorShadeThread;
- public IsEDTExample() {
- JTable table = new JTable(tableModel);
- table.setRowHeight(100);
- table.setDefaultRenderer(Object.class, new ColorRenderer());
- add(table);
- add(new JLabel("Thread Color Shade:"));
- ButtonGroup group = new ButtonGroup();
- JRadioButton redOption = new JRadioButton("Red");
- group.add(redOption);
- redOption.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- threadShade = RED;
- }
- });
- JRadioButton blueOption = new JRadioButton("Blue");
- group.add(blueOption);
- blueOption.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- threadShade = BLUE;
- }
- });
- JRadioButton greenOption = new JRadioButton("Green");
- group.add(greenOption);
- greenOption.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- threadShade = GREEN;
- }
- });
- redOption.setSelected(true);
- this.threadShade = RED;
- add(redOption);
- add(greenOption);
- add(blueOption);
- add(new JButton(new RandomColorAction()));
- this.keepRunning = true;
- this.colorShadeThread = new Thread(new RandomColorShadeRunnable());
- this.colorShadeThread.start();
- }
- private class RandomColorAction extends AbstractAction {
- public RandomColorAction() {
- super("Create Random Color");
- }
- public void actionPerformed(ActionEvent e) {
- IsEDTExample.this.tableModel.generateRandomColor(VARIABLE);
- }
- }
- private class ColorTableModel extends AbstractTableModel {
- private Color[][] colors = new Color[3][3];
- public ColorTableModel() {
- for (int i = 0; i < SIZE; i++) {
- for (int x = 0; x < SIZE; x++) {
- colors[i][x] = Color.white;
- }
- }
- }
- public int getRowCount() {
- return SIZE;
- }
- public int getColumnCount() {
- return SIZE;
- }
- public Object getValueAt(int rowIndex, int columnIndex) {
- return colors[rowIndex][columnIndex];
- }
- public void generateRandomColor(int type) {
- Random random = new Random(System.currentTimeMillis());
- final int row = random.nextInt(SIZE);
- final int column = random.nextInt(SIZE);
- final Color color;
- if (type == RED) {
- color = new Color(random.nextInt(256), 0, 0);
- } else if (type == BLUE) {
- color = new Color(0, 0, random.nextInt(256));
- } else if (type == GREEN) {
- color = new Color(0, random.nextInt(256), 0);
- } else {
- color = new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256));
- }
- if (SwingUtilities.isEventDispatchThread()) {
- colors[row][column] = color;
- fireTableCellUpdated(row, column);
- } else {
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- colors[row][column] = color;
- fireTableCellUpdated(row, column);
- }
- });
- }
- }
- }
- private class ColorRenderer implements TableCellRenderer {
- private JLabel label;
- public ColorRenderer() {
- label = new JLabel();
- label.setOpaque(true);
- label.setPreferredSize(new Dimension(100, 100));
- }
- public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
- boolean hasFocus, int row, int column) {
- label.setBackground((Color) value);
- return label;
- }
- }
- private class RandomColorShadeRunnable implements Runnable {
- public void run() {
- while (keepRunning) {
- tableModel.generateRandomColor(threadShade);
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- }
- }
- }
- }
- public static void main(String[] a) {
- JFrame f = new JFrame("Is Event Dispatch Thread Example");
- f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- f.add(new IsEDTExample());
- f.pack();
- f.setVisible(true);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement