Görüntü birimine sığdırılırsa, yeniden boyutlandırılabilir sütunlara sahip bir JTable JScrollPane oluşturmam gerekir (kullanıcı sütun genişliğini artırdığında - yatay kaydırma çubuğu görünür). Bunun için table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
kullanıyorum. Ayrıca, viewport tüm tabloyu kapsayacak kadar geniş olduğunda - sütunlar görünüm genişliğini doldurmak için esnemelidir. tek bir şey dışında,Yalnızca JTable'ın otomatik olarak yeniden boyutlandırılmasını etkinleştirme
@Override
public boolean getScrollableTracksViewportWidth() {
return getPreferredSize().width < getParent().getWidth();
}
Bu yaklaşım iyi çalışır: Ben aşağıdaki gibi JTable sınıfının getScrollableTracksViewportWidth()
yöntemini geçersiz sahip Bunu gerçekleştirmek için ilk kez pozisyon başlatmak için kendi genişliği dönmek sütunu yeniden boyutlandırmak çalıştığınızda. Sütunu hızlı bir şekilde yeniden boyutlandırır ve fare tablasını serbest bırakırsam iyi çalışmaya devam eder. Peki, bu tür davranışların nedeni nedir? Neden tablo getScrollableTracksViewportWidth()
yanlış döndürse bile yeniden boyutlandırmayı dener? Ya da, bu tür yeniden boyutlandırma modunu uygulamak için daha iyi bir çözüm önerebilir misiniz?
Körük yukarıdaki sorunun basit bir çalışma örneğidir: Bir sütunun boyutunu artırmak için çalışırken, yatay kaydırma görünür değilken Varsayılan doLayout()
mantık çalışma değildi gibi görünüyordu
import javax.swing.*;
public class TestTable {
private static Object[][] data = new Object[][] {
{ "a", "b", "c" },
{ "d", "e", "f" }
};
private static Object[] colNames = new Object[] { "1", "2", "3" };
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JTable table = new JTable(data, colNames) {
@Override
public boolean getScrollableTracksViewportWidth() {
return getPreferredSize().width < getParent().getWidth();
}
};
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JScrollPane(table));
frame.pack();
frame.setVisible(true);
}
});
}
}
Mükemmel, iyi çalışıyor. – user2137020
Ayrıca bkz: http://stackoverflow.com/questions/15499255/jtable-with-autoresize-horizontal-scrolling-and-shrinkable-first-column farklı bir uygulama için. – camickr
Bir çekicilik gibi çalışır! Mükemmel çalıştığını bulduğum tek çözüm. –