gpt4 book ai didi

java - 无法让 JScrollPane 在 JFrame 上工作

转载 作者:搜寻专家 更新时间:2023-11-01 02:49:39 24 4
gpt4 key购买 nike

请查看下面的小代码。滚动 Pane 出现,但 slider 不出现。即使我调整框架的大小, slider 也不会。请帮忙。

import javax.swing.*;
public class sample {
static JFrame frame;
public static void main(String[] args) {
String Msg = "Sample Message To Test Scrolling";
frame = new JFrame("Sample Program");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 600);
JPanel panel = new JPanel();
panel.setLayout(null);

for (int ypos = 0, i = 0; i < 40; i++) {
JLabel label = new JLabel("" + i + " " + Msg);
label.setFont(new Font("Courier", Font.BOLD, 12));
panel.add(label);
label.setBounds(10, ypos + 5,
label.getPreferredSize().width,
label.getPreferredSize().height);
ypos += label.getPreferredSize().height;
}
JScrollPane scroll = new JScrollPane(panel,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
frame.setLayout(new BorderLayput());
frame.add(scroll);
frame.setVisible(true);
}
}

最佳答案

只有当 JScrollPane 的视口(viewport)包含的组件大于视口(viewport)时, slider 才会出现。根据你发布的代码,我不明白为什么你的组件会比视口(viewport)大,因为面板的大小将基于它的 preferredSize,这是永远不会改变的,因为你正在使用它添加组件空布局。

顺便说一句,你几乎不应该使用 null 布局。

例如:

import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.*;

public class Sample2 {
private static final int PREF_W = 600;
private static final int PREF_H = PREF_W;
private static final int MAX_ROWS = 400;
private static final String TEXT_BODY = "Sample Message To Test Scrolling";;

private static void createAndShowGui() {
JPanel panel = new JPanel(new GridLayout(0, 1));
panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
for (int i = 0; i < MAX_ROWS; i++) {
String text = String.format("%03d %s", i, TEXT_BODY);
JLabel label = new JLabel(text);
panel.add(label);
}

JScrollPane scrollPane = new JScrollPane(panel);
scrollPane.setPreferredSize(new Dimension(PREF_W, PREF_H));

JFrame frame = new JFrame("Sample2");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(scrollPane);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}

关于java - 无法让 JScrollPane 在 JFrame 上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13773876/

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