即使我有一个JScrollPane,JTextArea也会在我输入文本时展开,但滚动条也没有显示 [英] JTextArea expands as I enter text even though I have a JScrollPane, but the scrollbar doesn't show up either
问题描述
我有这个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屋!