即使我有一个JScrollPane,JTextArea也会在我输入文本时展开,但滚动条也没有显示 [英] JTextArea expands as I enter text even though I have a JScrollPane, but the scrollbar doesn't show up either

查看:114
本文介绍了即使我有一个JScrollPane,JTextArea也会在我输入文本时展开,但滚动条也没有显示的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个JTextArea,并且在输入文本时它会不断扩展。我知道这看起来像一个重复的问题,但我已经按照答案,他们没有为我工作。我还附加了一个JScrollPane,但没有显示滚动条。我希望JTextArea保持不变的大小并使其可滚动。请看看我的代码并告诉我出了什么问题,因为我不知道!

I have this JTextArea and it keeps expanding as text is entered. I know this looks like a repeat question but I've followed the answers and they haven't worked for me. I also have a JScrollPane attached to it but no scrollbar is showing up. I want the JTextArea to remain a constant size and to have it scrollable. Please take a look at my code and tell me what's wrong, because I have no idea!

这是我的代码:

package com.robot;

import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.*;

public class GUI extends JFrame implements Runnable {

//start of the constructor method for GUI
public GUI() {

    //defines the line break
    String newline = System.getProperty("line.separator");

    //defines objects
    Toolkit tk = Toolkit.getDefaultToolkit();
    Dimension dim = tk.getScreenSize();

    //sets the size of the GUI
    this.setSize(600, 400);

    //centers the GUI
    int xPos = (dim.width / 2) - (this.getWidth() /2);
    int yPos = (dim.height / 2) - (this.getHeight() /2);

    this.setLocation(xPos, yPos);

    //makes the program unable to be resized
    this.setResizable(false);

    //allows the user to close the program with the x button
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //sets the title of the program
    this.setTitle("ROBOT Alpha Alfred Version 3.0");

    //creates panels to hold the elements of the GUI
    JPanel mainPanel = new JPanel();
    JPanel buttonPanel = new JPanel();
    JPanel consolePanel = new JPanel();

    //creates buttons
    JButton runDemo = new JButton("Run Demo");
    JButton runLive = new JButton("Run Live");
    JButton scan = new JButton("Scan Market");
    JButton findPatterns = new JButton("Find Patterns");
    JButton cleanFolder = new JButton("Clean Up Folder");
    JButton configureSettings = new JButton("Configure Settings");

    //creates the console
    JTextArea console = new JTextArea(6, 40);

    //sets the default text of the console
    console.setText("----------------------- ROBOT Console -----------------------" + newline);

    //makes the console unable to be edited
    console.setEditable(false);
    console.append("3sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs22323sfasfs\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline\nline123");

    //sets the line wrapping of the console
    console.setLineWrap(true);
    console.setWrapStyleWord(true);
    JScrollPane scrollBar = new JScrollPane(console);
    scrollBar.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);

    //adds buttons to the buttonPanel
    buttonPanel.add(runDemo);
    buttonPanel.add(runLive);
    buttonPanel.add(scan);
    buttonPanel.add(findPatterns);
    buttonPanel.add(cleanFolder);
    buttonPanel.add(configureSettings);

    //adds the console to the console panel
    consolePanel.add(console);
    consolePanel.add(scrollBar);

    //adds panels to the main panel
    mainPanel.add(buttonPanel);
    mainPanel.add(consolePanel);

    //adds the main panel to the frame
    this.add(mainPanel);

    //sets the GUI to be visible
    this.setVisible(true);

}

public void run() {

}

}

非常感谢你!

推荐答案

你的问题出现在这里......

Your problem occurs here...

consolePanel.add(console);
consolePanel.add(scrollBar);

基本上,通过添加控制台,组件只能属于单个父组件 consolePanel 你要从滚动窗格中删除它。

Basically a component can only belong to a single parent, by adding the console to the consolePanel you are removing it from the scroll pane.

console 已包含在容器中,因此您只需将父容器(滚动窗格)添加到 consolePane 。 ..

The console is already contained within a container, so you simply only need to add the parent container (the scroll pane) to consolePane...

//consolePanel.add(console);
consolePanel.add(scrollBar);

在旁注中,你应该注意 Tookit#getScreenSize 是否返回整个屏幕,而不是可查看的屏幕大小(应用程序可以安全使用的区域)。所以而不是......

On a side note, you should be careful of Tookit#getScreenSize is it returns the "whole" screen and not the viewable screen size (that area which the application can safely use). So instead of ...

Toolkit tk = Toolkit.getDefaultToolkit();
Dimension dim = tk.getScreenSize();

//sets the size of the GUI
this.setSize(600, 400);

//centers the GUI
int xPos = (dim.width / 2) - (this.getWidth() /2);
int yPos = (dim.height / 2) - (this.getHeight() /2);

this.setLocation(xPos, yPos);

你可以使用 setLocationRelativeTo(null)和获得更好的结果

You could use setLocationRelativeTo(null) and achieve a better result

我还建议在添加内容之后以及在使内容可见之前调整组件大小,例如......

I would also suggest sizing the component after you have added the content and before you make it visible, for example...

this.pack();
this.setLocationRelativeTo(null);
this.setVisible(true);

这可以确保窗口更准确地考虑不同平台之间的差异......

This ensures that the window takes into consideration in difference between different platforms more accurately...

这篇关于即使我有一个JScrollPane,JTextArea也会在我输入文本时展开,但滚动条也没有显示的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆