gpt4 book ai didi

java - 文本字段 setBounds 函数不适用于特定 JFrame

转载 作者:行者123 更新时间:2023-12-01 16:16:29 26 4
gpt4 key购买 nike

我正在尝试创建一个包含 3 个文本字段的 JPanel。除了 textArea3 之外,包括按钮在内的其他所有内容都已就位。最后的面板是这样的。正如您在图片中看到的,textArea3 使用整个 JFrame 而不是遵循 setBounds 方法。

    //Text Area 1
JTextArea textArea = new JTextArea();

JScrollPane jScrollPane1 = new JScrollPane(textArea);
jScrollPane1.setVerticalScrollBarPolicy(
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
jScrollPane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
textArea.setWrapStyleWord(true);
textArea.setLineWrap(true);
textArea.setFont(new Font("Consolas", Font.LAYOUT_LEFT_TO_RIGHT, 20));

JTextArea textArea2 = new JTextArea();
JScrollPane jScrollPane2 = new JScrollPane(textArea2);
jScrollPane2.setVerticalScrollBarPolicy(
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
jScrollPane2.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
textArea2.setWrapStyleWord(true);
textArea2.setLineWrap(true);
textArea2.setFont(new Font("Consolas", Font.LAYOUT_LEFT_TO_RIGHT, 20));

//Text Area 3
JTextField textArea3 = new JTextField();
textArea3.setFont(new Font("Consolas", Font.LAYOUT_LEFT_TO_RIGHT, 20));

jScrollPane1.setBounds(30,30,300,300);
jScrollPane2.setBounds(30,400,200,200);
//textArea3 is not working
textArea3.setBounds(600,800,100,50);
button2.setBounds(350,30,80,30);

button1.setBounds(350,400,80,30);
frame.add(button1);
frame.add(button2);
frame.add(jScrollPane2);
frame.add(jScrollPane1);
frame.add(textArea3);

frame.setVisible(true);

编辑:所以这可能是 JDK 中的一个错误。我创建了另一个类,称为类框架,并设置方法来生成文本区域等。

textArea3 uses entire JFrame and is not getting bound

最佳答案

As you can see in picture, textArea3 uses entire JFrame instead of following setBounds method.

不,我看不到。我看到 5 个组件。我没有看到任何使用整个框架的组件。

如果事实上您确实看到文本区域占据了整个框架,那是因为:

  1. JFrame 的默认布局管理器是 BorderLayout
  2. 当您将组件添加到 BorderLayout 且未指定约束时,将假定位于 CENTER。
  3. 但是,CENTER 中只能显示一个组件,因此布局管理器只会为最后添加的组件(恰好是 textArea3)提供大小/位置。

其他组件只是因为您手动设置每个组件的边界而碰巧出现。

您不应该尝试设置组件的边界。设置每个组件的大小和位置是布局管理器的工作。

所以解决方案是摆脱所有 setBounds() 语句并使用布局管理器。

阅读 Swing 教程中关于 Layout Managers 的部分了解更多信息。看来您正在使用网格,因此您可以使用 GridBagLayout

此外,当您创建 JTextArea 时,您应该使用类似以下内容的内容:

JTextArea textArea = new JTextArea(15, 20); 

这将允许文本区域计算其大小,以便显示 15 行,每行大约 20 个字符。大小将根据使用的字体计算。

关于java - 文本字段 setBounds 函数不适用于特定 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62378189/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com