有没有办法将 JScrollPane 视口(viewport)的宽度固定为其所有者(JScrollPane)的宽度。我的目标是一个 JScrollPane,它可以向下滚动,但视口(viewport)的宽度被压缩/设置为 JScrollPane 的大小。
我尝试手动设置视口(viewport)的大小,但失败了,因为我使用了 GridLayout 来布局组件。我还尝试了 GridBagLayout 并将约束设置为视口(viewport)及其组件。我还禁用了水平滚动条。
我不熟悉宽度 Java FX。
最佳答案
您只需为面板实现Scrollable
界面即可。这是一个例子:
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Rectangle;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.Scrollable;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
/**
* <code>ScrollableExample</code>.
*/
public class ScrollableExample implements Runnable {
public static void main(String[] args) {
SwingUtilities.invokeLater(new ScrollableExample());
}
@Override
public void run() {
JPanel scrollPanel = new ScrollablePanel();
scrollPanel.setLayout(new GridLayout(20, 1));
for (int i = 0; i < 20; i++) {
scrollPanel.add(new JLabel("It's a simple label to test whether scrolling works " + i));
}
JFrame frm = new JFrame("Test scrolling");
frm.add(new JScrollPane(scrollPanel));
frm.setSize(220, 200);
frm.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
frm.setLocationRelativeTo(null);
frm.setVisible(true);
}
private static class ScrollablePanel extends JPanel implements Scrollable {
@Override
public Dimension getPreferredScrollableViewportSize() {
return getPreferredSize();
}
@Override
public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
return 5;
}
@Override
public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
return 20;
}
@Override
public boolean getScrollableTracksViewportWidth() {
// no horizontal scroll bar
return true;
}
@Override
public boolean getScrollableTracksViewportHeight() {
return false;
}
}
}
关于java - 将视口(viewport)宽度设置为滚动 Pane 宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56561431/