即使我有一个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);
这确保了窗口更准确地考虑了不同平台之间的差异……