Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Really too hard to say anything (whatever clever) to my defense, (try &amp; enjoy)</p> <p><img src="https://i.stack.imgur.com/kpxII.jpg" alt="enter image description here"></p> <pre><code>import java.awt.*; import java.awt.event.ActionEvent; import java.awt.image.BufferedImage; import java.util.LinkedList; import java.util.Queue; import java.util.Random; import javax.swing.*; public class GradientPaintWithSwingTimerAndRunnable extends JFrame implements Runnable { private static final long serialVersionUID = 1L; private Queue&lt;Icon&gt; iconQueue = new LinkedList&lt;Icon&gt;(); private JLabel label = new JLabel(); private Random random = new Random(); private JPanel buttonPanel = new JPanel(); private JPanel labelPanel = new JPanel(); private Timer backTtimer; private Timer labelTimer; private JLabel one = new JLabel("one"); private JLabel two = new JLabel("two"); private JLabel three = new JLabel("three"); private final String[] petStrings = {"Bird", "Cat", "Dog", "Rabbit", "Pig", "Fish", "Horse", "Cow", "Bee", "Skunk"}; private boolean runProcess = true; private int index = 1; private int index1 = 1; public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { GradientPaintWithSwingTimerAndRunnable t = new GradientPaintWithSwingTimerAndRunnable(); } }); } public GradientPaintWithSwingTimerAndRunnable() { iconQueue.add(UIManager.getIcon("OptionPane.errorIcon")); iconQueue.add(UIManager.getIcon("OptionPane.informationIcon")); iconQueue.add(UIManager.getIcon("OptionPane.warningIcon")); iconQueue.add(UIManager.getIcon("OptionPane.questionIcon")); one.setFont(new Font("Dialog", Font.BOLD, 24)); one.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); two.setFont(new Font("Dialog", Font.BOLD, 24)); two.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); three.setFont(new Font("Dialog", Font.BOLD, 10)); three.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); labelPanel.setLayout(new GridLayout(0, 3, 4, 4)); labelPanel.add(one); labelPanel.add(two); labelPanel.add(three); //labelPanel.setBorder(new LineBorder(Color.black, 1)); labelPanel.setOpaque(false); JButton button0 = createButton(); JButton button1 = createButton(); JButton button2 = createButton(); JButton button3 = createButton(); buttonPanel.setLayout(new GridLayout(0, 4, 4, 4)); buttonPanel.add(button0); buttonPanel.add(button1); buttonPanel.add(button2); buttonPanel.add(button3); //buttonPanel.setBorder(new LineBorder(Color.black, 1)); buttonPanel.setOpaque(false); label.setLayout(new BorderLayout()); label.add(labelPanel, BorderLayout.NORTH); label.add(buttonPanel, BorderLayout.SOUTH); Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); label.setPreferredSize(new Dimension(d.width / 3, d.height / 3)); add(label, BorderLayout.CENTER); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); setVisible(true); startBackground(); startLabel2(); new Thread(this).start(); printWords(); // generating freeze Swing GUI durring EDT } private JButton createButton() { JButton button = new JButton(); button.setBorderPainted(false); button.setBorder(null); button.setFocusable(false); button.setMargin(new Insets(0, 0, 0, 0)); button.setContentAreaFilled(false); button.setIcon(nextIcon()); button.setRolloverIcon(nextIcon()); button.setPressedIcon(nextIcon()); button.setDisabledIcon(nextIcon()); nextIcon(); return button; } private Icon nextIcon() { Icon icon = iconQueue.peek(); iconQueue.add(iconQueue.remove()); return icon; } // Update background at 4/3 Hz private void startBackground() { backTtimer = new javax.swing.Timer(750, updateBackground()); backTtimer.start(); backTtimer.setRepeats(true); } private Action updateBackground() { return new AbstractAction("Background action") { private static final long serialVersionUID = 1L; @Override public void actionPerformed(ActionEvent e) { label.setIcon(new ImageIcon(getImage())); } }; } // Update Label two at 2 Hz private void startLabel2() { labelTimer = new javax.swing.Timer(500, updateLabel2()); labelTimer.start(); labelTimer.setRepeats(true); } private Action updateLabel2() { return new AbstractAction("Label action") { private static final long serialVersionUID = 1L; @Override public void actionPerformed(ActionEvent e) { two.setText(petStrings[index]); index = (index + 1) % petStrings.length; } }; } // Update lable one at 3 Hz @Override public void run() { while (runProcess) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { one.setText(petStrings[index1]); index1 = (index1 + 1) % petStrings.length; } }); try { Thread.sleep(300); } catch (Exception e) { e.printStackTrace(); } } } // Note: blocks EDT private void printWords() { for (int i = 0; i &lt; petStrings.length; i++) { String word = petStrings[i].toString(); System.out.println(word); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } three.setText(word); } three.setText("&lt;html&gt; Concurency Issues in Swing&lt;br&gt;" + " never to use Thread.sleep(int) &lt;br&gt;" + " durring EDT, simple to freeze GUI &lt;/html&gt;"); } public BufferedImage getImage() { int w = label.getWidth(); int h = label.getHeight(); GradientPaint gp = new GradientPaint(0f, 0f, new Color( 127 + random.nextInt(128), 127 + random.nextInt(128), 127 + random.nextInt(128)), w, w, new Color(random.nextInt(128), random.nextInt(128), random.nextInt(128))); BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = bi.createGraphics(); g2d.setPaint(gp); g2d.fillRect(0, 0, w, h); g2d.setColor(Color.BLACK); return bi; } } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload