【问题标题】:Scroll for GUI not working the way I want it to滚动查看 GUI 无法按我想要的方式工作
【发布时间】:2021-12-28 14:09:06
【问题描述】:

我试图让这个 GUI 上的这个文本区域有一个滚动,但是当我尝试添加它时,文本区域会覆盖滚动条,反之亦然。没有错误。代码:

        // Text Area at the Center
        JTextArea ta = new JTextArea ( 16, 58 );
        ta.setEditable ( false ); // set textArea non-editable
        JScrollPane scroll = new JScrollPane ( ta );
        scroll.setVerticalScrollBarPolicy ( ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS );
        
        send.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent send) {
                String data = tf.getText();
                ta.append("You: " + data + "\n");
                tf.setText("");
                System.out.println(data);
            }
        });
        
        //Adding Components to the frame.
        frame.getContentPane().add(BorderLayout.SOUTH, panel);
        frame.getContentPane().add(BorderLayout.CENTER, ta);
        frame.add(ta);
        ta.add(scroll);
        frame.setVisible(true);

【问题讨论】:

  • 我通常在显示之前.pack()我的 JFrame。你试过吗?
  • ta.add(scroll) JScrollPane 添加到JTextArea。上面的两行也是不正确的。不要将JTextArea 添加到您的框架中,因为文本区域位于JScrollPane 的视口内(因为您将其提供给了滚动窗格构造函数)。正确的方法是将scroll 添加到您的JFrame,例如frame.add(BorderLayout.CENTER, scroll).
  • @maloomeister 谢谢你的回答,成功了。

标签: java swing user-interface scroll


【解决方案1】:

这些行是问题:

frame.getContentPane().add(BorderLayout.CENTER, ta);
frame.add(ta);
ta.add(scroll);

不要将JTextArea 添加到您的框架中,因为JTextArea 已正确配置为位于JScrollPane 的视口内(因为您之前已将其提供给滚动窗格构造函数)。此外,您不应该将JScrollPane 添加到JTextArea,因为您希望它反过来。 正确的方法是删除上面提到的行并将scroll 添加到您的JFrame,如下所示:

frame.add(scroll, BorderLayout.CENTER);

旁注:

  • 如 cmets 中所述,请考虑在将框架设置为可见之前在框架上调用 pack(),以正确调整框架及其组件的大小。

【讨论】:

  • @camickr 当然,感谢您的提示,更改了它。从原来的sn-p复制粘贴过来,没有多想。
猜你喜欢
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
  • 2021-04-12
  • 2021-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多