2016-04-14 32 views
0

Yaptığım bir proje için, biri JFrame oluşturan ve diğeri JFrame'e eklenmesi gereken bir görüntü içeren 2 sınıf oluşturmam gerekiyor.JFrame'e diğer sınıflardan resim ekleme

Benim JFrame oluşturarak sınıf Sürücü denilen ve görünümü de şu:

import javax.swing.JFrame; 
import javax.swing.JTextField; 
public class Driver { 
    private JFrame win; 
    private Animals animals = new Animals(); 
    private BirdButton nextBtn, enlargeBtn, shrinkBtn, moveToBtn; 
    private JTextField field; 

    public Driver() { 
     win = new JFrame("Angry Animal Name Game"); 
     win.setBounds(100, 100, 600, 600); 
     win.setLayout(null); 
     win.setVisible(true); 
     nextBtn = new BirdButton("NEXT", 10, 10, animals); 
     win.add(nextBtn, 0); 
     enlargeBtn = new BirdButton("ENLARGE", 10, 60, animals); 
     win.add(enlargeBtn, 0); 
     shrinkBtn = new BirdButton("SHRINK", 10, 110, animals); 
     win.add(shrinkBtn, 0); 
     field = new JTextField(); 
     field.setBounds(10, 250, 100, 20); 
     win.add(field, 0); 
     moveToBtn = new BirdButton("MOVETO", 10, 275, animals, field); 
     win.add(moveToBtn, 0); 
     win.add(animals, 0); 
     animals.recenter(); 
     win.repaint(); 
    } 
} 

Sonra biraz kuşların görüntüsünü içeren ayrı bir sınıf Hayvanlar, var. Bu görüntünün JFrame'imde görünmesini istiyorum, ancak kodum çok sıcak çalışmıyor gibi görünüyor. Hayvanlar şuna benzer:

Hayvanlar yana
public class Animals extends Image { 
    public Circle selector; 
    public Image birds; 

    public Animals(){ 
     birds = new Image(225,200,150,200); 
     birds.setImage("AngryBirds.png"); 
     selector = new Circle(70,70,birds.getX(),birds.getY()); 
     selector.setThickness(5); 
     birds.add(selector,0); 
    } 

    public void recenter(){ 
     birds.setLocation((600-birds.getWidth()/2),(600-birds.getHeight()/2)); 
    } 
} 

Görüntü uzanır Ben görüntüyü kendisi ya da ne yapmam gerekir Hayvanlar yapmak için bu komutu kullanmak mümkün? Sürücüyü herhangi bir şekilde değiştirmem gerekiyor. Benim Hayvanlar kodunu düzenledi bazı yanıtları sonra

Teşekkür

bu olması:

public class Animals extends Image { 
    public Circle selector; 

    public Animals(){ 
     new Image(225,200,150,200); 
     setImage("AngryBirds.png"); 
     selector = new Circle(70,70,this.getX(),this.getY()); 
     selector.setThickness(5); 
     this.add(selector,0); 
    } 

    public void recenter(){ 
     this.setLocation((600-this.getWidth()/2),(600-this.getHeight()/2)); 
    } 
} 
+1

Yeni Hayvanlar sınıfınız hala Görüntüyü genişletiyor. Bu Image sınıfı hakkında hiç bir şeyden bahsetmediniz - bu sizin sınıfınız mı? Java.awt.Image var mı? –

+1

'win.setLayout (null);' 1) Java GUI'leri farklı işletim sistemlerinde, ekran boyutlarında, ekran çözünürlüğünde vb. Farklı lokallerde farklı PLAF'ler kullanarak çalışmalıdır. Bu nedenle, piksel mükemmel düzenine elverişli değildir. Bunun yerine düzen yöneticileri veya [bunların kombinasyonları] (http://stackoverflow.com/a/5630271/418556), [beyaz alan] için düzen dolguları ve kenarlıkları ile birlikte kullanın (http://stackoverflow.com/a/17874718/ 418.556). 2) Daha iyi yardım için, daha önce bir [MCVE] veya [Kısa, Kendini İçeren, Doğru Örnek] (http://www.sscce.org/) gönderin. –

+0

Kargaşa için özür dilerim, Resim profesörün bize verdiği bir derstir. Kendi başıma problemlerim varmış gibi görünmüştüm ama @HovercraftFullOfEels senin fikrini bana verdiğin fikirler.Teşekkürler. –

cevap

3

Her şeyden önce, Hayvanlar Resmi uzatmak olmadığından emin olun. Hayvanlar herhangi bir şekilde şekil veya formda bir Görüntü değildir ve bu yüzden bunu genişletmemelidir. Ayrıca, hangi Image sınıfını kullandığınızı da netleştirmeniz gerekir. Bir Swing bileşeni, java.awt.Image'dan türeyen Görseller'i kullanmayı ve Image adında kendi sınıfınız varsa ve ad çakışmaları önlemek için hemen yaptığınız gibi (ör. birds = new Image(225,200,150,200);) yeniden adlandırmayı bekler.

JFrame'in görüntüleri kullanmasını sağlamak için, genellikle ImageIO.read(...) aracılığıyla elde edilen BufferedImage'ın kullanabileceği görüntüleri oluşturmanız gerekir. Kodunuzda BufferedImage kullanımı görmüyorum, yani eğer olsaydım başladım Orada.

Ayrıca, Hayvanlar sınıfınızın genişletilmemesi gerektiği gibi görünüyor, ancak herhangi bir türden Görüntüler değil, JFrame'inize eklediğinizden dolayı bir tür Swing bileşenini genişletmelidir.

diğer konular:

  • Kişisel Sürücü sınıfı kodu null düzenini kullanır. Boş düzenler ve setBounds(), yeni başlayanlar için karmaşık GUI'leri oluşturmanın en kolay ve en iyi yolu gibi Swing'e benziyor gibi görünse de, Swing GUI'leri, bunları kullanırken karşılaşacağınız daha ciddi zorlukları yaratırsınız. GUI yeniden boyutlandırıldığında bileşenlerinizi yeniden boyutlandırmazlar, geliştirmek veya sürdürmek için bir kraliyet cadısıdırlar, kaydırma yuvalarına yerleştirildiğinde tamamen başarısız olurlar, orijinal platformdan farklı olan tüm platformlarda veya ekran çözünürlüklerinde görüntülendiklerinde çok kötü görünürler. . Öğretmeniniz bu sınıfı yarattı mı? Eğer öyleyse, ne yaptığını bilip bilmediklerini merak etmeliyim.
+0

Öncelikle, cevapladığınız için teşekkürler, bu topluluğu harika kılan sizler gibi insanlar. Cevabınıza baktıktan sonra, bazı şeyleri öğretmenin ihtiyaç duyduğu bağlamda işler hale getirmek için kodumu düzenledim. Hayvanların bir görüntüyü kaybettiğini söyledin, ama olması gereken şey bu. Bir daha gözden geçirme isteğiniz varsa yeni kodu gösterecek olan orijinal yazımı düzenleyeceğim –

+0

Kesinlikle boş alan düzeni hakkında ne kastettiğimi görüyorum, gerçekten işleri garip hale getiriyor. –

İlgili konular