Java 让滚动条在上使用绝对定位
您好,我正在尝试制作一个游戏,我想做的一件基本事情是添加一个带有滚动条的JTextArea。这是我的代码: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();
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);