即使我有一个JScrollPane,JTextArea也会在我输入文本时展开,但滚动条也没有显示

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

这是我的代码:

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("\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() { } } 

非常感谢!

你的问题出现在这里……

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

基本上,组件只能属于单个父组件,方法是将console添加到consolePanel ,然后将其从滚动窗格中删除。

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

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

另外,你应该注意Tookit#getScreenSize它是否返回“整个”屏幕而不是可视屏幕大小(应用程序可以安全使用的区域)。 而不是……

 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)并获得更好的结果

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

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

这确保了窗口更准确地考虑了不同平台之间的差异……