2011-11-30 13 views
11
public class MinesweeperMenu extends MinesweeperPanel{ 

private JPanel picture = new JPanel(); 
private JButton play = new JButton("Play"); 
private JButton highScores = new JButton("High Score and \nStatistics"); 
private JButton changeMap = new JButton("Create Custom \nor Change Map"); 
private JButton difficulty = new JButton("Custom or\nChange Difficulty"); 
private JButton user = new JButton("Change User"); 
Image img; 

public MinesweeperMenu() 
{ 
    // Set Layout for the menu 
    LayoutManager menuLayout = new BoxLayout(menu, BoxLayout.Y_AXIS); 
    menu.setLayout(menuLayout); 

    // Set Layout for the window 
    LayoutManager windowLayout = new BorderLayout(); 
    window.setLayout(windowLayout); 

    // Add buttons to the panels 
    menu.add(play); 
    menu.add(highScores); 
    menu.add(changeMap); 
    menu.add(difficulty); 
    menu.add(user); 

    // Add picture to the frame 
    try{ 
    File input = new File("./setup/images/MineMenuPicture.jpg"); 
    img = ImageIO.read(input); 
    } 
    catch(IOException ie) 
    { 
     System.out.println(ie.getMessage()); 
    } 

    // Add action listeners 
    changeMap.addActionListener(new ChangeMapListener()); 

} 


public void paintComponent(Graphics g) 
{ 
    // POSITION OF THE PICTURE 
    int x = 650; 
    int y = 585; 
    g.drawImage(img, x, y, null); 
} 

public void displayFrame() 
{ 
    // Display Frame 
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    window.setVisible(true); 
} 

public static void main(String[] args) 
{ 
    MinesweeperMenu menu = new MinesweeperMenu(); 
    window.pack(); 
    menu.displayFrame(); 
    window.repaint(); 
} 
} 


public class MinesweeperPanel extends JFrame{ 

public static final Color COLOR_KEY = new Color(220, 110, 0); 

// Initialize all the objects 
public static JFrame window = new JFrame("Minesweeper++"); 
public static JPanel menu = new JPanel(); 

// Close the current window 
public static void close() 
{ 
    window.setVisible(false); 
    window.dispose(); 
} 



} 

मुझे फ्रेम में प्रदर्शित करने के लिए मेरी छवि नहीं मिल सकती है। मैंने सब कुछ करने की कोशिश की है, लेकिन मुझे लगता है कि यह एक गलती है कि मैं महसूस नहीं कर रहा हूं क्योंकि मैं जावा स्विंग में नया हूं। किसी भी तरह की सहायता का स्वागत किया जाएगा।जावा स्विंग में एक छवि प्रदर्शित करना

+0

क्या आपने यह सुनिश्चित करने के लिए जांच की है कि img! = Null? मैं यह सुनिश्चित करने के लिए कि छवि को सही तरीके से सेटअप किया जा रहा है, मैं इसे खींचने से पहले या तो एक प्रिंट स्टेटमेंट के साथ एक चेक डिबग या डाल दूंगा। –

+0

'नया जेबटन ("उच्च स्कोर और \ n सांख्यिकी"); 'जेबटन' लाइन ब्रेक का समर्थन नहीं करता है। लाइन ब्रेक पाने के लिए एचटीएमएल का उपयोग करना संभव है, लेकिन अक्षम होने पर बटन गलत दिखाई देगा। –

उत्तर

31

आप एक बहुत भ्रमित कार्यक्रम संरचना होने से चीजों को खुद के लिए मुश्किल बना रहे हैं, और मेरा सुझाव है कि आप चीजों को एक बहुत को आसान बनाने में।

एक के लिए, आपके वर्तमान माइन्सवेपरमेनू क्लास के लिए माइन्सवेपर पैनेल का विस्तार करने की आवश्यकता नहीं है, और बाद के वर्ग के लिए जेएफआरएएम का विस्तार करने की आवश्यकता नहीं है। फिर आपके पास कहीं और स्थिर जेएफआरएम है - यह बहुत अधिक जेएफआरम्स है, और बूट करने के लिए, आप अपनी छवि को एक जेएफआरएएम में प्रदर्शित करने की कोशिश कर रहे हैं, लेकिन दूसरा दिखा रहा है जिसमें तस्वीर नहीं है। आपके कार्यक्रम को केवल एक जेएफआरएएम की आवश्यकता है और इसे संभवतः बनाया जाना चाहिए, इसकी सामग्री के साथ भरवां, पैक किया गया और एक ही स्थान पर प्रदर्शित किया गया है, जैसा कि आप कर रहे हैं वहां बिखरे हुए नहीं हैं।

आप एक पेंट कॉम्पोनेंट ओवरराइड में चित्र प्रदर्शित करने की कोशिश कर रहे हैं, लेकिन इस विधि को कभी भी कॉल नहीं किया जाएगा क्योंकि आपकी कक्षा जेएफआरएएम (अंततः) तक फैली हुई है और जेएफआरएएम में यह विधि नहीं है। आप सही विधि का उपयोग कर रहे हैं, लेकिन कक्षा जेपीनल को विस्तारित करनी चाहिए, और आपके पास पेंट कॉम्पोनेंट विधि ब्लॉक के ऊपर @Override एनोटेशन होना चाहिए ताकि आप यह सुनिश्चित कर सकें कि आप वास्तव में एक मूल विधि को ओवरराइड कर रहे हैं।

आप सभी इस कार्यक्रम में स्थिर सब कुछ से छुटकारा पाने चाहिए। यहाँ स्थिर एकमात्र चीज मुख्य विधि और शायद कुछ स्थिरांक होना चाहिए, लेकिन यह है।

यहां और अधिक त्रुटियां हैं, और मेरे पास उन सभी पर जाने के लिए बहुत कम समय है। शुरुआत से शुरू करने पर विचार करें, छोटे से शुरू करें, काम करने के लिए छोटे बिट्स प्राप्त करें, और फिर उन्हें एक साथ जोड़ दें।

उदाहरण के लिए, पहले एक बहुत छोटा प्रोग्राम बनाएं जो छवि छवि में किसी छवि में पढ़ने की कोशिश करता है, इसे छवि आइकन में रखें, छवि आइकन को जेएलएबल में रखें, और जेलेबेल को जॉक्शनपेन में प्रदर्शित करें, यह सरल, बस यदि आप छवियों में पढ़ सकते हैं, उदाहरण के लिए ठीक है, को देखने के लिए, कुछ इस तरह:

import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 

import javax.imageio.ImageIO; 
import javax.swing.ImageIcon; 
import javax.swing.JLabel; 
import javax.swing.JOptionPane; 

public class TestImages { 

    // *** your image path will be different ***** 
    private static final String IMG_PATH = "src/images/image01.jpg"; 

    public static void main(String[] args) { 
     try { 
     BufferedImage img = ImageIO.read(new File(IMG_PATH)); 
     ImageIcon icon = new ImageIcon(img); 
     JLabel label = new JLabel(icon); 
     JOptionPane.showMessageDialog(null, label); 
     } catch (IOException e) { 
     e.printStackTrace(); 
     } 
    } 
} 

फिर जब आप यह कर लें, अगर आप अब एक JPanel कि अपनी paintComponent विधि में एक ही छवि से पता चलता बना सकते हैं देखते हैं, और जॉपेनपेन में इस जेपीनेल को प्रदर्शित करें।

फिर एक जेएफआरएम बनाएं और जेफ्रेम में छवि-होल्डिंग जेपीनल प्रदर्शित करें।

लगातार पुनरावृत्तियों के माध्यम से आप अवधारणाओं का परीक्षण करेंगे, गलतियों को सुधारने और अपने कार्यक्रम का निर्माण करेंगे।

+0

आप बहुत भ्रमित प्रोग्राम संरचना करके अपने लिए चीजों को मुश्किल बना रहे हैं, और मेरा सुझाव है कि आप चीजों को सरल बनाते हैं। ...जीवन सबक की तरह लगता है ... :) –

6
File input = new File("./setup/images/MineMenuPicture.jpg"); 

तो MineMenuPicture.jpg एक आवेदन संसाधन है, यह एक जार में हो सकता है और Class.getResource(String) से प्राप्त यूआरएल द्वारा पहुँचा चाहिए।

+0

अच्छा उठाओ! 1 + –

संबंधित मुद्दे