Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JScrollPane仅显示垂直条,水平条显示三个点_Java_Swing - Fatal编程技术网

Java JScrollPane仅显示垂直条,水平条显示三个点

Java JScrollPane仅显示垂直条,水平条显示三个点,java,swing,Java,Swing,我只想为我的面板添加垂直滚动条。我可以成功地做到这一点,但在水平视图中,长文本中并没有出现点。我想看到垂直滚动条和三个点的长文本,不适合屏幕。我怎么做?顺便说一下,如果我直接将面板添加到出现的帧点中 带滚动窗格 将面板直接添加到框架时 public class ScrollPaneDemo { public static void main(String[] args) { JPanel panel = new JPanel(); panel.setL

我只想为我的面板添加垂直滚动条。我可以成功地做到这一点,但在水平视图中,长文本中并没有出现点。我想看到垂直滚动条和三个点的长文本,不适合屏幕。我怎么做?顺便说一下,如果我直接将面板添加到出现的帧点中

带滚动窗格

将面板直接添加到框架时

public class ScrollPaneDemo {

    public static void main(String[] args) {
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

        for (int i = 0; i < 25; i++) {
            panel.add(createLabel());
        }

        JScrollPane scrollPane = new JScrollPane(panel);
        scrollPane
                .setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

        JFrame frame = new JFrame();
        frame.getContentPane().add(scrollPane);
        frame.setSize(300, 300);

        frame.setVisible(true);
    }

    public static JLabel createLabel() {
        return new JLabel(
                "Long Text, Long Text, Long Text, Long Text, Long Text, Long Text, Long Text, Long Text, Long Text");
    }

}

public类ScrollPaneDemo{
公共静态void main(字符串[]args){
JPanel面板=新的JPanel();
panel.setLayout(新的BoxLayout(panel,BoxLayout.Y_轴));
对于(int i=0;i<25;i++){
panel.add(createLabel());
}
JScrollPane scrollPane=新的JScrollPane(面板);
滚动窗格
.setHorizontalScrollBarPolicy(JScrollPane.HorizontalScrollBar\u NEVER);
JFrame=新JFrame();
frame.getContentPane().add(滚动窗格);
框架。设置尺寸(300300);
frame.setVisible(true);
}
公共静态JLabel createLabel(){
返回新的JLabel(
“长文本,长文本,长文本,长文本,长文本,长文本,长文本,长文本,长文本,长文本,长文本”);
}
}

这肯定是个坏主意,但如果这是你想要的,那就在这里。修改面板,将其
getPreferredSize
替代为默认高度,但其父面板的宽度:

JPanel panel = new JPanel() {

    @Override
    public Dimension getPreferredSize() {

        int h = super.getPreferredSize().height;
        int w = getParent().getSize().width;
        return new Dimension(w, h);
    }
};
父类是
JViewport
,它是滚动窗格中组件的“查看窗口”

现在排队

scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
不执行任何操作,因为可以保证面板的宽度为视口的宽度,这意味着您无处可滚动,默认情况下滚动条不会出现。查看剩余文本的唯一方法是通过调整框架的大小来调整滚动窗格的大小


如果有任何问题,我不会感到惊讶。

问题发生是因为布局管理器已经决定了,由于什么原因,这是显示面板的最大可用空间量,您可以考虑尝试不同的布局管理器。没什么帮助,哪种布局能给我提供包括垂直scrolbar和文本后的点的视图。奇怪的是,当我在Mac上测试时,我没有发现任何问题。您可以尝试使用
GridBagLayout
JViewPort
有关。出现3个点是因为文本不适合面板。使用滚动窗格时,文本确实适合面板,因此没有3个点,但面板不适合查看端口,您可以滚动查看其余部分。谢谢。事实上,我改变了主意,用html实现了。即使如此,您的代码仍然可以完美地工作。