2014-12-15 20 views
6

Basit bir Soru Başvuru Uygulaması yapıyorum. Özel bir javaFX bileşeni içinde bir TableView kullanıyorum (bir soruyu temsil eden), ListView içinde (tüm soruları temsil etmek için kullanılır) ListCell olarak kullanılır.javafx TableView Boyutunu gerekli boyuta nasıl sınırlarsınız?

Ne İstiyorum: Her bir ListCell, tam içeriğini hala açıklarken mümkün olduğunca az alan kullanıyor (veya gerekli).

Ne olur? TableView standart bir boyuta göre varsayılan görünüyor. Tabloda daha fazla içerik varsa, içeriğini bir ScrollPane içinde görüntüler. TableView daha az içeriğe sahipse, kendisini boş alanla doldurur.


Ben bir dizi yolla benim sorunu çözmek için çalıştık:

  1. Başlangıçta ben bir yol kaydırma çubukları devreden olması gerektiğini düşündü. Ama bunu yapmanın bir yolunu bulamadım.
  2. Sonra PreferredSizeProperty değiştirerek tablonun boyutunu değiştirmeye çalıştı: table.setPrefHeight() Ama tablo ne kadar büyük herhangi bir bilgi bulamıyorum. table.setPrefHeight(USE_COMPUTED_SIZE); , beklediğim sonucu almadı. Daha sonra gerekli yüksekliği kendim hesaplamayı denedim, ancak tek tek satırların yüksekliğini belirlemenin herhangi bir yolunu bulamadım. Daha fazla bilgi için: http://www.microsoft.com/downloads/index.aspx?displaylang=tr Özel TableCell'in güncelleme yöntemi içinde this.getTableRow().getHeight()'u çağırmak NullPointerExceptions ile sonuçlanır. Null'a karşı işaretlendiğinde, hala 0 olur! TableRow<T> tr = this.getTableRow(); if (tr != null) { System.out.println(tr.getHeight()); }

  3. Oldukça sinirli, ben bu bilmecik özel TableCells noktasını sınırlar table.setFixedCellSize(20); arayarak, satır yüksekliğini düzeltmek karar verdi, ama ben başka türlü bir ilerleme olmadı. Ancak, tablo yüksekliği aynı zamanda, sabit bir satır yüksekliği ile çarpılan satırların sayısına eşit değildir, çünkü tablo başlığı dikkate alınmalıdır. Ve tablo üstbilgisine erişemedim veya tablo üstbilgileri boyutunu/yüksekliğini sormadım.

yanlış gitti ya ne gözardı tablonun her satırını görüntülemek için gerekli preciesly kadar büyük bir ListCell olması (benim orijinal hedefe ulaşmak için nerede bir öneriniz var mı, ancak tek değil boş hat?) Herhangi bir yardım/fikir en hoş geldiniz! Teşekkür ederim!

+0

Yani bunu birlikte tıkıştırdınız: ListView -> ListCell -> TableView? Bu birçok düzeyde yanlıştır. Nereden başlayacağımı bilmiyorum. Kullanıcı Arabirimini farklı bileşenlerle yeniden yazmanızı kesinlikle öneririm. ListView ve TableView her ikisi de büyük miktarda veri görüntülemek ve böylece çocuklarını (hücreleri) sanallaştırılmış bir şekilde düzenlemek anlamına gelir. ListView grafik olarak bir TableView içeren tek bir soru görüntülenmesi anlamına gelmez. – eckig

+0

A Soru, bir alt bileşeni olarak TableView kullanan özel bir bileşen tarafından bastırılır. Her soru kendi içinde bir ListView'de görüntülenecek bir ListCell'tir. TableView, benim durumumda büyük değil: 1 ile 10 satır arasında bir şey içerebilir. Katılıyorum: Bir satır için biraz anlamsız görünüyor, ancak birkaç satır gerekiyorsa, bunun nesi yanlış görmedim. – thorwinn

+0

Yapmak istediğiniz şey oldukça zor olacak (eğer mümkünse). Bir 'TableView' düzeni için kullanılmalıdır, burada yapmaya çalıştığınız şey etkilidir. Bir tablo görünümünün (yeniden boyutlandırılabilir sütunlar, sürüklenebilir sütunlar, üstbilgi tıklaması ile sıralama, vb.) Herhangi bir işlevine ihtiyacınız var mı? Değilse, bir 'TableView' yerine hücreyi görüntülemek için bir düzen bölmesi (ör. "GridPane") kullanmak daha iyi olabilir. –

cevap

0

bir göz atın: Bu örnek, 2 sıra minimum veya bir tablo tüm boyutu ile bir tablo görünümü vardır (Bağlar kullanımı ile size

1

yardımcı olabilir Belki

tableView.setColumnResizePolicy(..); 

tablo boyutunu hep öğelere ayarlayacaktır tabloyu besleyen listede bir dinleyici veya abonelik ile listedeki öğeler ...

/** 
* Helper to set table height based on content 
* 
* @param table  - the table in context 
* @param rowHeight - the height of a single row, alternatively could use table.fixedCellSizeProperty() 
* @param headerHeight - the height of the table header 
* @param margin  - a value for the margins 
*/ 
public void tableHeightHelper(TableView<?> table, int rowHeight, int headerHeight, int margin) { 
    table.prefHeightProperty().bind(Bindings.max(2, Bindings.size(table.getItems())) 
              .multiply(rowHeight) 
              .add(headerHeight) 
              .add(margin)); 
    table.minHeightProperty().bind(table.prefHeightProperty()); 
    table.maxHeightProperty().bind(table.prefHeightProperty()); 
} 

Gerçekten, liste görünümü için hücreleri nasıl özelleştirdiğinize ve hücre fabrikasını nasıl yapılandırdığınıza bağlıdır.ListView'daki fixedCellProperty() öğesi ayarlanmadığı sürece, ListView'de içerdikleri düğümlerin boyutuna göre ayarlanan tek tek hücrelerle ilgili bir sorun yaşamadım.

+0

Bu işlev gerçekleşir ve neden? – npskirk