簡體   English   中英

水平滾動+ JTable + Java

[英]Horizontal Scrolling + JTable + Java

我檢查了stackoverflow上有關在JTable上進行水平滾動的問題。 設置AUTO_RESIZE_OFF會讓我獲得水平滾動條,但同時表格不會使用滾動窗格的整個寬度。

我做了一些閱讀,事實證明這是自1998年以來的一個運行錯誤 (Oracle會修復這個嗎?)

我看到了一些關於騎行方法的建議,但沒有一個對我有用。 那么有人有答案嗎? 非常感謝。 基本上我需要表自動調整大小,但在任何列名稱被壓縮之前啟用水平滾動條。

謝謝。

在對其他答案進行咆哮之后 - JXTable(在SwingX項目中 )有一個額外的列布局屬性

  • 如果它們的組合pref小於當前寬度,則填充水平視口(即增加列寬),這與autoResizeMode相關
  • 將列大小保持在它們的pref,如果它們的組合pref大於當前寬度,則顯示水平滾動條

需要進行一些內部調整,所以(有偏見的)建議使用JXTable。 或者看看它的代碼和c&p - 所有允許的,所有開源:-)

檢查此鏈接並嘗試解決此問題

http://www.daniweb.com/software-development/java/threads/29263

帶水平滾動條的JTable

import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;

public class ScrollableJTable {

    public static void main(String[] args) {
        new ScrollableJTable();
    }

    public ScrollableJTable() {
        JFrame frame = new JFrame("Creating a Scrollable JTable!");
        JPanel panel = new JPanel();
        String data[][] = {
            {"001", "vinod", "Bihar", "India", "Biology", "65", "First"},
            {"002", "Raju", "ABC", "Kanada", "Geography", "58", "second"},
            {"003", "Aman", "Delhi", "India", "computer", "98", "Dictontion"},
            {"004", "Ranjan", "Bangloor", "India", "chemestry", "90", "Dictontion"},
            {"001", "vinod", "Bihar", "India", "Biology", "65", "First"},
            {"002", "Raju", "ABC", "Kanada", "Geography", "58", "second"},
            {"003", "Aman", "Delhi", "India", "computer", "98", "Dictontion"},
            {"004", "Ranjan", "Bangloor", "India", "chemestry", "90", "Dictontion"},
            {"001", "vinod", "Bihar", "India", "Biology", "65", "First"},
            {"002", "Raju", "ABC", "Kanada", "Geography", "58", "second"},
            {"003", "Aman", "Delhi", "India", "computer", "98", "Dictontion"},
            {"004", "Ranjan", "Bangloor", "India", "chemestry", "90", "Dictontion"},
            {"001", "vinod", "Bihar", "India", "Biology", "65", "First"},
            {"002", "Raju", "ABC", "Kanada", "Geography", "58", "second"},
            {"003", "Aman", "Delhi", "India", "computer", "98", "Dictontion"},
            {"004", "Ranjan", "Bangloor", "India", "chemestry", "90", "Dictontion"},
            {"001", "vinod", "Bihar", "India", "Biology", "65", "First"},
            {"002", "Raju", "ABC", "Kanada", "Geography", "58", "second"},
            {"003", "Aman", "Delhi", "India", "computer", "98", "Dictontion"},
            {"004", "Ranjan", "Bangloor", "India", "chemestry", "90", "Dictontion"},
            {"001", "vinod", "Bihar", "India", "Biology", "65", "First"},
            {"002", "Raju", "ABC", "Kanada", "Geography", "58", "second"},
            {"003", "Aman", "Delhi", "India", "computer", "98", "Dictontion"},
            {"004", "Ranjan", "Bangloor", "India", "chemestry", "90", "Dictontion"},
            {"001", "vinod", "Bihar", "India", "Biology", "65", "First"},
            {"002", "Raju", "ABC", "Kanada", "Geography", "58", "second"},
            {"003", "Aman", "Delhi", "India", "computer", "98", "Dictontion"},
            {"004", "Ranjan", "Bangloor", "India", "chemestry", "90", "Dictontion"},
            {"001", "vinod", "Bihar", "India", "Biology", "65", "First"},
            {"002", "Raju", "ABC", "Kanada", "Geography", "58", "second"},
            {"003", "Aman", "Delhi", "India", "computer", "98", "Dictontion"},
            {"004", "Ranjan", "Bangloor", "India", "chemestry", "90", "Dictontion"}
        };
        String col[] = {"Roll", "Name", "State", "country", "Math", "Marks", "Grade"};
        JTable table = new JTable(data, col);
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        JTableHeader header = table.getTableHeader();
        header.setBackground(Color.yellow);
        JScrollPane pane = new JScrollPane(table);
        panel.add(pane);
        frame.add(panel);
        frame.pack();
//        frame.setSize(500, 200);
//        frame.setUndecorated(true);
//        frame.getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

你必須setTableColumn的寬度適當,詳細了解這里在這里 ,可運行的例子在這里

那么這里有一些鏈接,我希望它們不會破壞。 swinglabs下載頁面在這里:

http://swinglabs.org/downloads.jsp

但在我訪問該網站時,這些下載被破壞了(這可能現在已經修復),經過一番調查后,我發現他們的服務器上有無聊的訪問權限:

http://java.net/downloads/swingx/releases/1.6.2/

這就是我遇到的所有麻煩,只需找到庫。 這只是將.jar文件解壓縮並添加到我的項目然后導入JXTable(org.jdesktop.swingx.JXTable)的問題。

JXTable擴展了常規JTable(參見文檔: http//download.java.net/javadesktop/swinglabs/releases/0.8/docs/api/org/jdesktop/swingx/JXTable.html )所以所有常規JTable方法等仍然可用。

導入庫后,只需告訴表格水平滾動即可

JXTable table = new JXTable(yourTableModel)
table.setHorizontalScrollEnabled(true)

Swing labs提供了一個可愛的教程,解釋了他們在JTable上所做的所有增強。 請參閱此處的教程:

http://swinglabs.org/docs/components/JXTable/tutorial.jsp?step=0

希望這有幫助,真的幫助了我。 感謝Kleopatra指出了正確的道路。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM