Java ScrollPane自动调整内容水平大小,而无需滚动显示';行不通
所以我不知道它是否不起作用,或者我是否期望它以不同的方式起作用,但无论如何 我有一个org.openide.windows.TopComponent,它有三个不同项目的列表。此列表可以通过单击其名称来隐藏,因此高度根据可见的列表而变化。如果列表总高度大于顶部组件高度,则应显示滚动条。如果宽度改变,列表中的元素应重新排列,以便列表使用可用的整个宽度。所以我采取的方法是: 顶部组件 JScrollPane内部(提供我需要的滚动条)。只有垂直滚动 在杰帕内尔 在三个列表(带JList的JScrollPanes)中,使用各自的jlabel单击并隐藏内容 因此,如果我遵循这个模式,一切看起来都很好,当我改变宽度使其变大时,列表中的元素会重新排列以使用新的宽度。但当我尝试将列表缩小到原来的大小时,列表保持原样,一些元素隐藏起来(没有足够的空间容纳所有元素),就好像有一个滚动条(水平)。但是没有!但是,如果我移除外部滚动窗格并更改列表的宽度,列表的大小会非常好(当我将其变宽和变窄时),但我没有需要的垂直滚动Java ScrollPane自动调整内容水平大小,而无需滚动显示';行不通,java,swing,resize,jscrollpane,Java,Swing,Resize,Jscrollpane,所以我不知道它是否不起作用,或者我是否期望它以不同的方式起作用,但无论如何 我有一个org.openide.windows.TopComponent,它有三个不同项目的列表。此列表可以通过单击其名称来隐藏,因此高度根据可见的列表而变化。如果列表总高度大于顶部组件高度,则应显示滚动条。如果宽度改变,列表中的元素应重新排列,以便列表使用可用的整个宽度。所以我采取的方法是: 顶部组件 JScrollPane内部(提供我需要的滚动条)。只有垂直滚动 在杰帕内尔 在三个列表(带JList的JScrollP
public class ViewPalettePanel extends TopComponent {
fcp = new PalettePanel();
scroll = new JScrollPane(fcp,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 1;
gbc.fill = GridBagConstraints.BOTH;
gbc.weightx = 1;
gbc.weighty = 1;
add(scroll, gbc);
}
public class PalettePanel extends javax.swing.JPanel {
public PalettePanel() {
initComponents();
}
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
lbl1 = new javax.swing.JLabel();
scPnl1 = new javax.swing.JScrollPane();
lbl2 = new javax.swing.JLabel();
scPnl2 = new javax.swing.JScrollPane();
lbl3 = new javax.swing.JLabel();
scPnl3 = new javax.swing.JScrollPane();
lblPadding = new javax.swing.JLabel();
setLayout(new java.awt.GridBagLayout());
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3);
add(lbl1, gridBagConstraints);
scPnl1.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scPnl1.setMinimumSize(new java.awt.Dimension(60, 60));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3);
add(scPnl1, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 2, 0, 2);
add(lbl2, gridBagConstraints);
scPnl2.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scPnl2.setMinimumSize(new java.awt.Dimension(60, 60));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3);
add(scPnl2, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 4;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3);
add(lbl3, gridBagConstraints);
scPnl3.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scPnl3.setMinimumSize(new java.awt.Dimension(60, 60));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 5;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3);
add(scPnl3, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 6;
gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
gridBagConstraints.weighty = 1.0;
add(lblPadding, gridBagConstraints);
}
}
这是我在视觉部分使用的代码(或多或少是完整的)。如果我将add(scroll,gbc)更改为add(fcp,gbc),则我想要的调整大小可以正常工作,但滚动不起作用
有什么想法吗 我发现在JScrollPane中将这个添加到JPanel中是可行的,但我不确定是否会有任何副作用。。。(不过对我来说还行)
为了更快地获得更好的帮助,请发布一个or。
@Override
public java.awt.Dimension getPreferredSize() {
int h = super.getPreferredSize().height;
int w = getParent().getSize().width;
return new java.awt.Dimension(w, h);
}