你好,我正在尝试制作一个游戏,我想做的一件基本的事情是添加一个带有滚动条的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
,你应该是......
用
panel1.add(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);