gpt4 book ai didi

Java Swing ;嵌入在 JScrolledPane 中的 JTable 的水平滚动问题

转载 作者:行者123 更新时间:2023-11-30 05:58:54 27 4
gpt4 key购买 nike

我遵循了本指南中的一些提示:JTable with horizontal scrollbar但仍有问题。

我有两个列标题:名称和描述(为了我们在这个例子中的目的)

我希望能够在添加条目时水平滚动(即:名称/描述只有 1 行)。然而,Swing 似乎并没有默认这种行为!

我在 ScrollPane 中嵌入了一个 JTable。 JScrollPane 有以下参数:JScrollPane.VERTICAL_SCROLLBAR_​​AS_NEEDED 和 JScrollPane.HORIZONTAL_SCROLLBAR_​​AS_NEEDED

如果我禁用:myTable.AutoResizeMode(AUTO_RESIZE_OFF) 列标题不会填满整个表格(可能只有表格的 1/2)。我必须手动调整“描述”列的大小才能看到整个内容。

我怎样才能自动调整大小,但水平滚动仍然有效?

最佳答案

您可以按如下方式扩展 JTable:

public class JHorizontalFriendlyTable extends JTable {

@Override
public Dimension getPreferredSize() {
if (getParent () instanceof JViewport) {
if (
((JViewport) getParent()).getWidth() > super.getPreferredSize().width)
) {
return getMinimumSize();
}
}
return super.getPreferredSize();
}

@Override
public boolean getScrollableTracksViewportWidth () {
if (autoResizeMode != AUTO_RESIZE_OFF) {
if (getParent() instanceof JViewport) {
return (((JViewport) getParent()).getWidth() > getPreferredSize().width);
}
return true;
}
return false;
}
}

示例用法:

jScrollPane1 = new JScrollPane();
TableModel jTable1Model = new DefaultTableModel(...);
JTable jTable1 = new JHorizontalFriendlyTable();
jScrollPane1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
jScrollPane1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
jScrollPane1.setViewPortView(jTable1);
jTable1.setModel(jTable1Model);
jTable1.setPreferredSize(new java.awt.Dimension(1051,518));
jTable1.setPreferredScrollableViewPortSize(new java.awt.Dimension(1000,528));
jTable1.getSize(new java.awt.Dimension(1051, 528));

if (jTable1.getPreferredScrollableViewPortSize().getWidth() >
((JViewPort) jTable1.getParent()).getPreferredSize().getWidth())
{
jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
jTable1.doLayout();
}

jTable1.setDragEnabled(false);
jTable1.setColumnSelectionAllowed(false);
jTable1.getTableHeader().setReorderingAllowed(false);

关于Java Swing ;嵌入在 JScrolledPane 中的 JTable 的水平滚动问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3857807/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com