2016-04-01 14 views
1

processing çizimi içeren bir JPanel contası bu JFrame vardır. panelJFrame bileşenleri yeniden boyutlandırıldıktan sonra yalnızca doğru konumdadır (bazen)

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import processing.core.PApplet; 

public class TestCase { 
    public static void main(String[] args) { 
     ProcessingFrame pFrame = new ProcessingFrame(); 
     pFrame.setVisible(true); 
    } 
} 

@SuppressWarnings("serial") 
public class ProcessingFrame extends JFrame{  
    public ProcessingFrame(){ 
     this.setSize(600, 400); 
     this.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
     JPanel panel = new JPanel(); 
     ProcessingSketch pSketch = new ProcessingSketch(); 
     panel.add(pSketch); 
     this.add(panel); 
     pSketch.init(); 
     this.setVisible(true); 
    } 
} 

public class ProcessingSketch extends PApplet{ 
    public ProcessingSketch(){ 
     //... 
    } 
    public void setup(){ 
     size(600, 400); 
     background(200); 
    } 
    public void draw(){ 
     rect(250,100,100,200); 
    } 
} 

Çok sık (yaklaşık% 50) ve/veya sketch uygun konuma render değildir: Kod şöyle görünür. Bazen, kare boyutunun yaklaşık yarısı sağdadır, bazen çerçevedeki çizimin sadece altını görüyorum.

Çerçeveyi fare ile yeniden boyutlandırdıktan sonra, her şey iyi görünüyor. JFrame'i undecorated'a ayarlamak istiyorum, ancak her şeyi yerine koymak için pencereleri yeniden boyutlandırmanın bir yolu yok.

Bu Bunu çözmek için çalıştık budur:

Başka fikirleriniz var mı?

+1

Bu kod şöyle bir şeye benziyor: - bize yardımcı olmuyor. Sorunu gösteren uygun bir [SSCCE] (http://sscce.org/) gönderin. – camickr

+0

Teşekkür ederiz @camickr, bir test vakası oluşturmaya çalıştım. – 7morgen

+0

Üzgünüz, 3. taraf paketinin ne işe yaradığını bilmiyorum. Belki düzeni etkiliyor. Bir SSCCE, JDK sınıflarına dayanmalıdır. – camickr

cevap

1

Bu, iş parçacığı sorunu gibi görünüyor. İşleme kendi animasyon dizisini kullanıyor, bu yüzden sorun yaşadığına gerçekten şaşırmadım ve kendimi sporadik olmalarına şaşırmadım. Bu konuların doğası. Gerçekte, İşleme'nin en son sürümü, bir Swing uygulamasına bu şekilde bir İşlem çizimi ekleyebilme özelliğini kaldırmıştır. Bu sorunu gerçekten çözmek istiyorsanız, İşleme'nin en son sürümüne güncellemeniz ve bir Java kitaplığı olarak kullanmanız gerekir. Bu daha çok iş, ama bu eski yolla devam etmekten daha "doğru".

Ama bunu duymak istediğin şey olmadığını biliyorum, denemek istediğim ilk şey JFrame.revalidate() işlevini çağırıyor. İşleme taslağı başlatıldıktan sonra bunu yapmanız gerekir, ki bu da daha önce belirtilen iş parçacığı sorunlarıyla zor olabilir. Bunu bir tür gecikmeyle yapmanız gerekebilir veya belki setup() işlevinden yapabilirsiniz.

Eğer bu işe yaramazsa, JFrame'inizi bir süre sonra programlı olarak yeniden boyutlandırmayı deneyebilirsiniz. Bu oldukça hackish, ama yine de, "doğru" şekilde ilerlemek, İşleminizi güncellemek ve eski yolu gömmekten vazgeçmektir.

+0

Çok teşekkür ederim! JFrame.revaildate() 'sadece iyi çalışıyor. Ben en son 'setup()' komutunu yazdım. Nitekim, işleme 3'teki değişim, dilek-todo listemdeki en büyük noktalardan biridir. – 7morgen