【问题标题】:ScrollPane not showing on JLabelScrollPane 未在 JLabel 上显示
【发布时间】:2015-05-08 07:34:01
【问题描述】:

当我运行这个程序时,我在标签上看不到滚动条。我错过了什么?

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Util1
{
    public static void main(String[] args)
    {
        new Util1();
    }

    public Util1()
    {
        EventQueue.invokeLater(new Runnable() 
        {
            public void run() 
            {

                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new ExamplePane());

                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true); 
            }
        });
    }

    protected class ExamplePane extends JPanel 
    {
        public ExamplePane() 
        {
            final JPanel panel = new JPanel(new GridBagLayout());
            final JLabel message = new JLabel("<html>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello</html>");

            message.setPreferredSize(new Dimension(500, 50));
            JScrollPane scroller = new JScrollPane( message, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
            scroller.setViewportView(message);

            panel.add(scroller);
            add(panel);
        }            
    }        
}

【问题讨论】:

  • 这个message.setPreferredSize是一个糟糕的开始
  • 更改布局管理器。我取出panel,将ExamplePane的布局管理器设置为BorderLayout
  • 我想是 html 造成的。也许这里的第一个答案有帮助:stackoverflow.com/questions/9335138/…
  • @MadProgrammer - 删除 setPreferredSize 并没有改变任何东西。
  • @MadProgrammer - ScrollPanes 在 GridbagLayout 中是否不可用。我已从更大的代码中缩小了此代码的范围 - 无法更改为 BorderLayout

标签: java swing jscrollpane jlabel


【解决方案1】:

要查看滚动条,将“消息”JLabel 包装到 JPanel 中,然后将此 JPanel 添加到 JScrollPane 中,如下所示:

    public ExamplePane() {
        final JPanel panel = new JPanel(new GridBagLayout());
        final JLabel message = new JLabel("<html>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello</html>");
        message.setPreferredSize(new Dimension(500, 50));

        final JPanel messagePanel = new JPanel();
        messagePanel.add(message);

        JScrollPane scroller = new JScrollPane(messagePanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scroller.setPreferredSize(new Dimension(100, 50));

        panel.add(scroller);
        add(panel);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    相关资源
    最近更新 更多