दिलचस्प पोस्ट
JavaFX 2.2 स्रोत कोड कहां से डाउनलोड कर सकते हैं? यूटीएफ -8 एनकोडेड एनएसडीटा को एनएसएसटीइंग में कनवर्ट करें उदाहरण विधि संदर्भ और लम्बा पैरा पैरामीटर स्थैतिक constexpr char के लिए अपरिभाषित संदर्भ डिज्स्स्ट्रा के एल्गोरिथम का उपयोग करने वाले नकारात्मक भार कैसे MySQL में अंतिम अद्यतन पंक्ति की आईडी प्राप्त करने के लिए? UrlScan बिना Azure / IIS7 में अत्यधिक HTTP प्रतिक्रिया शीर्षकों को हटाने / छिपाना / अक्षम करना jQuery टेक्स्ट फ़ेड / ट्रांज़िशन एक टेक्स्ट से दूसरे में? मक्खी पर एक php ऑब्जेक्ट में एक नई विधि कैसे जोड़ें? pg_views पर क्वेरी से अधूरी जानकारी वंशानुक्रम और बहुरूपता के बीच मुख्य अंतर क्या है? वाई रिटर्न 2012 जबकि y रिटर्न 2011 सरलडाटाफ़ॉर्मेट में जावास्क्रिप्ट रेगेक्स में नामांकित कैप्चरिंग समूह? ASP.NET C # में foreach के साथ चेकबॉक्स में चयनित आइटम्स के मान कैसे प्राप्त करें? UINavigationBar में बाईं ओर रिक्त स्थान रिक्त स्थान कैसे संपादित करें, सही UIBarButtonItem

स्विंगवार्कर, थ्रेड.sleep (), या javax.swing.timer? मुझे "एक विराम डालें" की आवश्यकता है

मैं एक मेमोरी गेम पर काम कर रहा हूं और मैं इसे सेट करना चाहता हूं, इसलिए मैं पहले "card" क्लिक करता हूं, दूसरा और अगर वो वही कार्ड नहीं हैं जो कुछ सेकंड के लिए दिखाता है तो वे "non-flipped" स्थिति

मैंने SwingWorker , SwingWorker . Thread.sleep और SwingTimer Thread.sleep का उपयोग करने की कोशिश की लेकिन मैं इसे काम करने के लिए नहीं कर सकता Thread.sleep के साथ दूसरा कार्ड "flip" अभ्यस्त होगा यदि वह डुप्लिकेट है तो यह नींद की मात्रा की प्रतीक्षा करता है और गायब हो जाता है। यदि यह एक मैच नहीं है जो "फेस डाउन" की प्रतीक्षा करता है और नींद टाइमर के बाद पहला कार्ड वापस फ्लिप करता है यह तब भी होता है जब मैं थ्रेड सोथ को जगह देता हूं।

Swing Timer साथ यह केवल "टाइमर को बदलने" के लिए दिखाई देता है, जबकि मैं कार्ड के साथ इंटरैक्ट कर रहा हूं, इससे पहले कि मैं सक्रिय करता हूं, उससे 8 कार्ड फ्लिकिंग हो जाता है।

मुझे SwingWorker साथ कोई भाग्य नहीं SwingWorker और मुझे यह भी पता नहीं है कि मैं इसके लिए क्या काम कर रहा हूं यह काम करेगा।

यह मेरे पास कोड है:

  class ButtonListener implements ActionListener { public void actionPerformed(ActionEvent e) { for(int index = 0; index < arraySize; index++) { if(button[index] == e.getSource()) { button[index].setText(String.valueOf(cards.get(index))); button[index].setEnabled(false); number[counter]=cards.get(index); if (counter == 0) { counter++; } else if (counter == 1) { if (number[0] == number[1]) { for(int i = 0; i < arraySize; i++) { if(!button[i].isEnabled()) { button[i].setVisible(false); } } } else { for(int i = 0; i < arraySize; i++) { if(!button[i].isEnabled()) { button[i].setEnabled(true); button[i].setText("Card"); } } } counter = 0; } } } } } 

असल में मुझे क्या चाहिए जब काउंटर == 1, और कार्ड एक मैच नहीं है, इस कोड को निष्पादित करने के लिए है:

  button[index].setText(String.valueOf(cards.get(index))); button[index].setEnabled(false); 

तो एक विराम इसलिए card is revealed उस समय के लिए card is revealed , और अंत में यह कार्ड वापस अपने चेहरे को नीचे स्थिति में लौटने के लिए शुरू कर दिया।

यह मैंने Thread.sleep() साथ करने की कोशिश की है:

 class ButtonListener implements ActionListener { public void actionPerformed(ActionEvent e) { for(int index = 0; index < arraySize; index++) { if(button[index] == e.getSource()) { button[index].setText(String.valueOf(cards.get(index))); button[index].setEnabled(false); number[counter]=cards.get(index); if (counter == 0) { counter++; } else if (counter == 1) { if (number[0] == number[1]) { for(int i = 0; i < arraySize; i++) { if(!button[i].isEnabled()) { button[i].setVisible(false); } } } else { try { Thread.sleep(800); } catch (InterruptedException e1) { e1.printStackTrace(); } for(int i = 0; i < arraySize; i++) { if(!button[i].isEnabled()) { button[i].setEnabled(true); button[i].setText("Card"); } } } counter = 0; } } } } } 

किसी भी सलाह के लिए अग्रिम धन्यवाद

वेब के समाधान से एकत्रित समाधान "स्विंगवार्कर, थ्रेड.sleep (), या javax.swing.timer? मुझे "एक विराम डालें" की आवश्यकता है"

javax.swing.Timer का उपयोग करें। एक भविष्य की घटना को ट्रिगर करने के लिए समय निर्धारित करने के लिए यह आपको यूआई में परिवर्तन सुरक्षित रूप से करने की अनुमति देगा, क्योंकि इवेंट डिस्पैचिंग थ्रेड के संदर्भ में टाइमर ट्रिगर हो जाएगा।

कई कार्ड फ्लिप करने में सक्षम होने की समस्या के साथ-साथ आपके पास ऐसा कोई भी सेट अप नहीं करना है जो उपयोगकर्ताओं को कार्ड फ्लिप करने से रोकता है, तो टाइमर का उपयोग

निम्न उदाहरण मूल रूप से केवल एक बार प्रति कार्ड एक कार्ड फ्लिप करने की अनुमति देता है।

एक बार कार्ड दोनों समूहों में फ़्लिप किया गया है, टाइमर शुरू हो गया है। जब यह ट्रिगर किया जाता है, तो कार्ड रीसेट हो जाते हैं।

यहां छवि विवरण दर्ज करें

 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.LinearGradientPaint; import java.awt.Point; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Random; import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.Timer; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.border.LineBorder; public class FlipCards { public static void main(String[] args) { new FlipCards(); } public FlipCards() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { } JFrame frame = new JFrame("Testing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); frame.add(new TestPane()); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } public class Card extends JPanel { private BufferedImage image; private boolean flipped = false; private Dimension prefSize; public Card(BufferedImage image, Dimension prefSize) { setBorder(new LineBorder(Color.DARK_GRAY)); this.image = image; this.prefSize = prefSize; } @Override public Dimension getPreferredSize() { return prefSize; } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g.create(); LinearGradientPaint lgp = new LinearGradientPaint( new Point(0, 0), new Point(0, getHeight()), new float[]{0f, 1f}, new Color[]{Color.WHITE, Color.GRAY}); g2d.setPaint(lgp); g2d.fill(new Rectangle(0, 0, getWidth(), getHeight())); if (flipped && image != null) { int x = (getWidth() - image.getWidth()) / 2; int y = (getHeight() - image.getHeight()) / 2; g2d.drawImage(image, x, y, this); } g2d.dispose(); } public void setFlipped(boolean flipped) { this.flipped = flipped; repaint(); } } public class CardsPane extends JPanel { private Card flippedCard = null; public CardsPane(List<BufferedImage> images, Dimension prefSize) { setLayout(new GridBagLayout()); MouseAdapter mouseHandler = new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (flippedCard == null) { Card card = (Card) e.getComponent(); card.setFlipped(true); flippedCard = card; firePropertyChange("flippedCard", null, card); } } }; GridBagConstraints gbc = new GridBagConstraints(); gbc.insets = new Insets(4, 4, 4, 4); gbc.fill = GridBagConstraints.BOTH; gbc.weightx = 0.25f; for (BufferedImage img : images) { Card card = new Card(img, prefSize); card.addMouseListener(mouseHandler); add(card, gbc); } } public Card getFlippedCard() { return flippedCard; } public void reset() { if (flippedCard != null) { flippedCard.setFlipped(false); flippedCard = null; } } } public class TestPane extends JPanel { private CardsPane topCards; private CardsPane bottomCards; private Timer resetTimer; public TestPane() { resetTimer = new Timer(1000, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { topCards.reset(); bottomCards.reset(); } }); resetTimer.setRepeats(false); resetTimer.setCoalesce(true); PropertyChangeListener propertyChangeHandler = new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { Card top = topCards.getFlippedCard(); Card bottom = bottomCards.getFlippedCard(); if (top != null && bottom != null) { resetTimer.start(); } } }; BufferedImage[] images = new BufferedImage[4]; try { images[0] = ImageIO.read(new File("./Card01.png")); images[1] = ImageIO.read(new File("./Card02.jpg")); images[2] = ImageIO.read(new File("./Card03.jpg")); images[3] = ImageIO.read(new File("./Card04.png")); Dimension prefSize = getMaxBounds(images); List<BufferedImage> topImages = new ArrayList<>(Arrays.asList(images)); Random rnd = new Random(System.currentTimeMillis()); int rotate = (int) Math.round((rnd.nextFloat() * 200) - 50); Collections.rotate(topImages, rotate); topCards = new CardsPane(topImages, prefSize); topCards.addPropertyChangeListener("flippedCard", propertyChangeHandler); List<BufferedImage> botImages = new ArrayList<>(Arrays.asList(images)); int botRotate = (int) Math.round((rnd.nextFloat() * 200) - 50); Collections.rotate(botImages, botRotate); bottomCards = new CardsPane(botImages, prefSize); bottomCards.addPropertyChangeListener("flippedCard", propertyChangeHandler); setLayout(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); gbc.insets = new Insets(4, 4, 4, 4); gbc.gridwidth = GridBagConstraints.REMAINDER; add(topCards, gbc); add(bottomCards, gbc); } catch (Exception e) { e.printStackTrace(); } } protected Dimension getMaxBounds(BufferedImage[] images) { int width = 0; int height = 0; for (BufferedImage img : images) { width = Math.max(width, img.getWidth()); height = Math.max(height, img.getHeight()); } return new Dimension(width, height); } } }