有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

基于一列宽度的java JTable水平滚动条

我遇到了一个以前在这里讨论过的问题:让一个包含JScrollPaneJTable来显示我想要的水平滚动条HERE是我尝试关注的一个帖子,但出于某种原因,它似乎不适合我的情况(我认为这是因为我已经将我的一个专栏设置为固定宽度)

以下是一个SSCCE:

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

@SuppressWarnings("serial")
public class TableScrollTest extends JFrame
{
    public TableScrollTest() {

        DefaultTableModel model = new DefaultTableModel(new Object[]{"key", "value"},0);
        model.addRow(new Object[]{"short", "blah"});
        model.addRow(new Object[]{"long", "blah blah blah blah blah blah blah"});

        JTable table = new JTable(model) {
            public boolean getScrollableTracksViewportWidth() {
                return getPreferredSize().width < getParent().getWidth();
            }
        };        
        table.getColumn("key").setPreferredWidth(60);
        table.getColumn("key").setMinWidth(60);
        table.getColumn("key").setMaxWidth(60);
        table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );

        JScrollPane scrollPane = new JScrollPane( table );
        getContentPane().add( scrollPane );
    }

    public static void main(String[] args) {
        TableScrollTest frame = new TableScrollTest();
        frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
        frame.pack();
        frame.setSize(200, 200);
        frame.setResizable(false);
        frame.setVisible(true);
    }
}

简而言之,我有一个用于显示键/值对的两列表。容纳表的容器是固定宽度的,表的第一列也是固定宽度的(因为我知道所有键名的长度)。第二列将包含不同字符串长度的值。只有当存在的值太长,无法容纳为列分配的宽度时,才会出现水平滚动条

enter image description here

因为上面的第二个值的长度很长,所以滚动条应该是可见的。然而,事实并非如此,我所尝试的一切都成功地让它始终可见,这不是我想要的。。。我只希望它在存在“long”值时可见。似乎在表构造函数中被重写的getScrollableTracksViewportWidth()方法会检查表的首选宽度。。。所以我需要根据第二列的内容引导表格选择更大的宽度。。。但我被难住了

有什么想法吗


共 (0) 个答案