代码之家  ›  专栏  ›  技术社区  ›  Attaxika

JScrollPane未在JTextArea中滚动

  •  0
  • Attaxika  · 技术社区  · 9 年前

    JScrollBar 显然地我添加了它,无法水平或垂直滚动。

    下面是它的外观:

    请记住,我是新来的,我仍在努力,所以如果这是一个非常明显的,很容易避免的事情,我很抱歉。

    public ChangeLog() {
    
        //Init.
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        JTextArea textarea = new JTextArea();
        JScrollPane scrollpane = new JScrollPane(textarea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    
        //Text Stuff
        textarea.setFont(textarea.getFont().deriveFont(16f));
        textarea.setText("Change Log: \n V1.0(A): Original encoder \n V1.0(B): Original decoder \n V1.1: Combination of both encoder and decoder \n V1.2: Added a heavier encoding & decoding system \n V1.3: Added an icon \n V1.4: Created an 'Info' page \n V1.5: Added a 'Change Log' page to the 'Info' page \n "
                + "V1.6: Removed the 'Change Log' \n V1.7: Added a 'Change Log' but was not implemented \n V1.8: Added a the 'Change Log' button \n V1.9: Added horizontal and vertical scroll bars to the 'Change Log'");
        textarea.setForeground(Color.BLACK);
        Dimension d = new Dimension(250, 275);
        textarea.setPreferredSize(d);
    
        //Other Stuff
        scrollpane.setViewportView(textarea);
        scrollpane.getPreferredSize();
    
        //Layout
        panel.setLayout(null);
        scrollpane.setBounds(new Rectangle(new Point(20, 20), scrollpane.getPreferredSize()));
        textarea.setBounds(new Rectangle(new Point(20, 23), textarea.getPreferredSize()));
    
        //Frame Stuff
        frame.setAlwaysOnTop(true);
        frame.setSize(300, 350);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setVisible(true);
        frame.setResizable(false);
    
        //Panel Stuff
        frame.add(panel);
        panel.setSize(frame.getSize());
        panel.setBackground(Color.BLUE);
        panel.add(textarea);
        panel.add(scrollpane);
    } }
    
    2 回复  |  直到 9 年前
        1
  •  1
  •   Aman    9 年前

    我已经创建了一个有效的解决方案。也做了一些改变。

    public TestClass() {
    
            //Init.
            JFrame frame = new JFrame();
            JPanel panel = new JPanel(new BorderLayout());
            JTextArea textarea = new JTextArea();
            JScrollPane scrollpane = new JScrollPane(textarea);
            panel.add(scrollpane, BorderLayout.CENTER);
    
    
    
            //Text Stuff
            textarea.setFont(textarea.getFont().deriveFont(16f));
            textarea.setText("Change Log: \n V1.0(A): Original encoder \n V1.0(B): Original decoder \n V1.1: Combination of both encoder and decoder \n V1.2: Added a heavier encoding & decoding system \n V1.3: Added an icon \n V1.4: Created an 'Info' page \n V1.5: Added a 'Change Log' page to the 'Info' page \n "
                    + "V1.6: Removed the 'Change Log' \n V1.7: Added a 'Change Log' but was not implemented \n V1.8: Added a the 'Change Log' button \n V1.9: Added horizontal and vertical scroll bars to the 'Change Log'");
            textarea.setForeground(Color.BLACK);
            //Dimension d = new Dimension(250, 275);
            //textarea.setPreferredSize(d);
    
    
            //Other Stuff
            scrollpane.setViewportView(textarea);
            scrollpane.getPreferredSize();
    
    
    
    
            //Layout
            //scrollpane.setBounds(new Rectangle(new Point(20, 20), scrollpane.getPreferredSize()));
            //textarea.setBounds(new Rectangle(new Point(20, 23), textarea.getPreferredSize()));
    
            //Listeners
    
    
    
            //Frame Stuff
            frame.setAlwaysOnTop(true);
            frame.setSize(300, 350);
            frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            frame.setVisible(true);
            frame.setResizable(false);
    
    
            //Panel Stuff
            frame.add(panel);
            panel.setSize(frame.getSize());
            panel.setBackground(Color.BLUE);
            panel.add(scrollpane);
        }
    

    如果还需要什么,请告诉我。是的,每个人都从零开始。我还在学习。你会得到很多东西。保持对学习的渴望。:-)

        2
  •  1
  •   camickr    9 年前
    Dimension d = new Dimension(250, 275);
    textarea.setPreferredSize(d);
    

    不要硬编码文本区域的大小。文本区域的大小将随着文本的添加/删除而动态变化,滚动条将根据需要显示/消失。

    JTextArea textarea = new JTextArea();
    

    不要创建没有参数的文本区域。相反,在创建文本区域时,请使用以下内容:

    JTextArea textarea = new JTextArea(5, 20);
    

    建议文本区域的默认大小。当你有超过5行的文本时,滚动条就会出现。

    所以我是一个相对较新的Java开发人员

    从阅读 Swing Tutorial 对于Swing基础。有一节是关于 How to Use Text Areas 让你开始。

    panel.setLayout(null);
    scrollpane.setBounds(...)