2009-06-02 3 views

cevap

1

Bir tahminde, PL & F bezemeli olarak ayarlayın ve bileşeni ada göre kaldırın.

+1

PL & F nedir? Teşekkürler. – kenshinji

+0

PL & F, Takılabilir Görünüm ve Hissedilir. Swing'in çirkin yolu keyfi bir Look & Feel alabilir. –

+2

Neden çirkin? Bunu yapmanın doğru yolu ne olurdu? –

53

Tüm iletişim kutusu başlığını dialog.setUndecorated (true) çağırarak kaldırabilirsiniz, ancak bu, iletişim kutusunun artık taşınamayacağı anlamına gelir.

Düğmenin herhangi bir şey yapmasını önlemek için dialog.setDefaultCloseOperation (WindowConstants.DO_NOTHING_ON_CLOSE) işlevini de çalıştırabilirsiniz.

Bunun yanında, X'i tamamen kaldırmak için bir yol olduğunu düşünmüyorum.

13

Başlık çubuğunu kaldırmak için dialog.setUndecorated(true) numaralı telefonu arayabilirsiniz. Yine de 'X' hakkında emin değilim.

Kullanıcılarınızın iletişim kutusunu kolayca kapatabilmesini istediğinizden 'X' kaldırmak harika bir fikir olmayabilir.

En iyi seçenek, kullanıcılar 'X' öğesini tıklattığında dialog.setDefaultCloseOperation veya WindowListener kullanarak ne olacağını denetlemektir.

9

Java 1.7'den (AKA Dolphin veya Java 7) bir pencerede kapat düğmesini devre dışı bırakamaz veya kaldıramazsınız. En üst düzeye çıkarma düğmesini frame.setResizable(false) ile kaldırabilir/devre dışı bırakabilir ve java.awt.Dialog ya da javax.swing.JDialog gibi bir sınıfı kullanarak en aza indirgeme ve ekranı kapatabilirsiniz. Başlık çubuğunu, kenarlıklarını ve düğmeleri frame.setUndecorated(true) ile kaldırabilirsiniz ve frame.setDefaultLookAndFeelDecorated(true) ile (bazı platformlar arası uyumluluk ve işletim sistemi entegrasyonunu kaybederken) başlık çubuğundaki tüm düğmelerin görünürlüğü üzerinde tam denetime sahip olabilirsiniz (bir JFrame veya JDialog). Bu şu anki JDK ile mümkün gördüğüm bütün kontroller.

+4

Bu, "hata geçitinde" düzeltmeyecektir (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5085932). –

+0

Bu tamamen doğru değil. OS X üzerinde bir JDialog alt sınıfının oluşturulması/başlatılması (El Capitan'da test edilir) başlık çubuğundaki herhangi bir düğmeyi kaldırmaz ve herhangi bir ayar kombinasyonu içermez (ve evet, her birleşimi denedim). Sadece 'setUndecorated (true)' hepsini kaldırır, ancak bununla birlikte başlık çubuğuna gider. Başlık çubuğu düğmelerinin davranışını kesinlikle değiştirebilirsin, ancak görünüşe göre ...w/yetersiz çözümler ve portatif olmayan kodlar için çok fazla zaman harcadığım çok zor bir durum. – EntangledLoops

+0

@EntangledLoops Yorumunuzu katkıda bulunduğunuz için teşekkürler! JDialog'un OS X iletişim kutularındaki simge durumuna küçült/"maksimize et" tuşlarına basmadığı doğru olsa da, simge durumuna küçültmeyi devre dışı bırakır. Bunu test etmek için elimde bir Mac yok, ancak en üst düzeye çıkarma düğmesine bahse girerim ve sadece yeniden boyutlandırır ve eğer dialog.setResizable (false) 'i ayarlarsanız, yeşil düğme de devre dışı kalır! Her neyse, cevabımda söylediğim gibi, bu konu üzerinde tam bir kontrole sahip olmadığımız için üzücüdür, ancak JSE içerik oluşturucularının tüm platformlar için program yapmasının ne kadar kabus olabileceğini hayal edebiliyorum. 3 – Supuhstar

-3
static public void removeButtons(Component c){ 
    if (c instanceof AbstractButton){ 
     String accn = c.getAccessibleContext().getAccessibleName(); 
     Container p=c.getParent(); 
     //log.debug("remove button %s from %s",accn,p.getClass().getName()); 
     c.getParent().remove(c); 
    } 
    else if (c instanceof Container){ 
     //log.debug("processing components of %s",c.getClass().getName()); 
     Component[] comps = ((Container)c).getComponents(); 
     for(int i = 0; i<comps.length; ++i) 
      removeButtons(comps[i]); 
    } 
} 
+7

bu, diyalog kapanış butonlarına değil diyaloğa eklenen herhangi bir düğmeyi kaldıracaktır. –

+0

Bunun başlık çubuğu düğmeleri üzerinde hiçbir etkisi yoktur (OS X). – EntangledLoops

+1

Bu gerçekten oldukça eğlenceli ve eğer xever düğmelerini x3 tuşlarıyla kullanırsanız uygulamanızı çok kullanışsız bir durumda bırakıyor. – Supuhstar

4

İşte benim deneyim:

setUndecorated(true) kullanarak çalıştı
  • : Bütün Dialog görünmez yaptı.
  • setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE) denendi: Bu davranış hiç değişmedi. İletişim kutum hala kapalı. Varsayılan kapatma işlemini DO_NOTHING_ON_CLOSE olarak ayarlamak, yakın işlemi kayıtlı bir WindowListener'un windowClosing() yöntemine verir. benim için çalıştı Ne

oldu: Ben yerine başka düğmelerden birine basın söylüyorum yakın düğmesine basarsanız başka iletişim göstermek bazı uygulamaları gördük

setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); 
//Remove any existing WindowListeners 
for (WindowListener wl : this.getWindowListeners()) 
     this.removeWindowListener(wl); 
this.addWindowListener(new WindowAdapter() { 
     @Override 
     public void windowClosing(WindowEvent e) { 
       if ("Optional condition") { 
         JOptionPane.showMessageDialog(null, "You cannot close this window"); 
       } 
     } 
});