Java 让滚动条在上使用绝对定位

Java 让滚动条在上使用绝对定位,java,swing,jframe,jscrollbar,Java,Swing,Jframe,Jscrollbar,您好,我正在尝试制作一个游戏,我想做的一件基本事情是添加一个带有滚动条的JTextArea。这是我的代码: package TestStuff; import javax.swing.*; @SuppressWarnings("serial") public class JTextAreaTest extends JFrame { public static void main(String[] args) { new JTextAreaTest();

您好,我正在尝试制作一个游戏,我想做的一件基本事情是添加一个带有滚动条的JTextArea。这是我的代码:

package TestStuff;

import javax.swing.*;

@SuppressWarnings("serial")
public class JTextAreaTest extends JFrame
{
     public static void main(String[] args)
     {
          new JTextAreaTest();
     }

     public JTextAreaTest()
     {
          this.setSize(1500, 600);
          setDefaultCloseOperation(
               JFrame.EXIT_ON_CLOSE);
          this.setLocation(450, 175);
          this.setExtendedState(JFrame.
MAXIMIZED_BOTH);
          this.setTitle("Game Display Test");

          panel1 = new JPanel(null);

          final JTextArea gameDisplay = new JTextArea(
               500, 300);
          gameDisplay.setBounds(424, 300, 500, 300);
          gameDisplay.setBackground(Color.BLACK);

          Font font = new Font ("Verdana", Font.BOLD, 
              14);
          gameDisplay.setFont(font);
          gameDisplay.setForeground(Color.WHITE);

          final JScrollPane displayScroll = new JScrollPane(
               gameDisplay);
          displayScroll.setHorizontalScrollBarPolicy(
               JScrollPane.HORIZONTAL_SCROLLBAR_AS_
                    NEEDED);
          displayScroll.setVerticalScrollBarPolicy(
               JScrollPane.  
               VERTICAL_SCROLLBAR_AS_NEEDED);

          panel1.add(gameDisplay);
          panel1.add(displayScroll);

          setContentPane(panel1);

          this.setVisible(true);
     }
}
当我运行它时,一切都可以正常工作,但是当文本超出JTextArea的边界时,滚动条永远不会出现!是的,我知道我使用的是绝对定位(没有布局),这很糟糕,但我需要它在我的游戏中的其他原因。提前谢谢!(另外,由于某种原因,我无法在我的计算机上连接到此网站,但我以前使用过你们,你们很棒,所以我必须在我的手机上键入此内容。抱歉,如果问题的布局搞砸了,请使用手机:P)

当你打电话时

panel1.add(gameDisplay);
panel1.add(displayScroll);
您正在有效地从
displayScroll
中删除
gameDisplay
,因为组件只能有一个父组件

它的工作原理可以归结为这样一个事实,即您正在玩弄
gameDisplay
面板的位置和大小,而不是
displayScroll
,您应该

使用


相反,但请确保只调整
displayScroll
的大小和位置,因为
displayScroll
将处理
gameDisplay

我遇到了类似的问题,解决方案是在滚动条内的组件上设置首选大小。我试图在滚动条中绝对定位东西。幸运的是,我知道确切的尺码。也许这是个特例

final JFrame frame = new JFrame("HelloWorldSwing");
final JPanel panel = new JPanel();
panel.setPreferredSize(PUT SIZE HERE);
panel.setLayout(null);
final JScrollPane scrollPane = new JScrollPane(panel);
frame.getContentPane().add(scrollPane);

是 啊所有我没有空间的地方。哈哈,我不是一个乱七八糟的程序员。永远不要做任何手动大小调整/定位-这是LayoutManager的专属任务,您可以随时使用(只需找到或实现一个适合您需要的)
final JFrame frame = new JFrame("HelloWorldSwing");
final JPanel panel = new JPanel();
panel.setPreferredSize(PUT SIZE HERE);
panel.setLayout(null);
final JScrollPane scrollPane = new JScrollPane(panel);
frame.getContentPane().add(scrollPane);