你的問題是在這裏:
textArea.setBounds(20, 400, 130, 30);
你約束的JTextArea的大小無論它具有什麼文本,都是130乘30,並且這樣做會阻止JScrollPane正常工作。你永遠不想設置你的Swing組件的大小(或者使用null佈局),而是用JTextArea來設置它的行和列。這將允許JTextArea在需要時擴展。
編輯:如user1722245 --- 1+提示他的回答。
請注意,我通常也會在我的JTextAreas上調用setLineWrap(true)
和setWrapStyleWord(true)
,以便在需要時將文本包裝到下一行。
此外,另一個重要因素是容器的佈局管理器,此處爲panelHome,您將添加您的JScrollPane,因爲這將影響它如何顯示JScrollPane及其內容。例如,在下面的代碼中,我將JTextArea的列和行屬性設置在其構造函數中,我設置文本區域換行策略,將其添加到JScrollPane的視口視圖,方法是將其傳遞到JScrollPane的構造函數中,然後將其添加到JScrollPane的視口視圖中我將JScrollPane添加到在CENTER位置使用的使用JPanel的BorderLayout。現在,當文本被附加到JTextArea時,它將顯示包裝文本並顯示滾動條,但僅在需要時顯示。
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.*;
@SuppressWarnings("serial")
public class TextAreaEg extends JPanel {
private static final int TEXTAREA_ROWS = 20;
private static final int TEXTAREA_COLUMNS = 40;
private static final String NONSENSE_TEXT = "Lorem ipsum dolor sit amet, "
+ "consectetur adipiscing elit, sed do eiusmod tempor "
+ "incididunt ut labore et dolore magna aliqua. Ut enim ad "
+ "minim veniam, quis nostrud exercitation ullamco laboris "
+ "nisi ut aliquip ex ea commodo consequat. Duis aute irure "
+ "dolor in reprehenderit in voluptate velit esse cillum "
+ "dolore eu fugiat nulla pariatur. Excepteur sint occaecat "
+ "cupidatat non proident, sunt in culpa qui officia "
+ "deserunt mollit anim id est laborum.";
private JTextArea textArea = new JTextArea(TEXTAREA_ROWS, TEXTAREA_COLUMNS);
public TextAreaEg() {
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
JScrollPane scrollPane = new JScrollPane(textArea);
JButton addTextButton = new JButton(new AddTextAction("Add Text", KeyEvent.VK_A));
JPanel buttonPanel = new JPanel();
buttonPanel.add(addTextButton);
setLayout(new BorderLayout());
add(scrollPane, BorderLayout.CENTER);
add(buttonPanel, BorderLayout.PAGE_END);
}
private class AddTextAction extends AbstractAction {
public AddTextAction(String name, int mnemonic) {
super(name);
putValue(MNEMONIC_KEY, mnemonic);
}
@Override
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < 5; i++) {
textArea.append(NONSENSE_TEXT + "\n");
}
}
}
private static void createAndShowGui() {
TextAreaEg mainPanel = new TextAreaEg();
JFrame frame = new JFrame("JTextArea Example");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
}
不工作'TEXTAREA =新的JTextArea( 「asdfsdfsdfsdfsdfasdfsdfsdfsdfsdfasdfsdfsdfsdfsdfasdfsdfsdfsdfsdfasdfsdfsdfsdfsdfasdfsdfsdfsdfsdfasdfsdfsdfsdfsdf」); \t \t \t \t \t \t \t \t JScrollPane的滾動=新JScrollPane的(); \t \t \t \t textArea.setColumns(20); \t \t \t \t textArea.setRows(5); \t \t \t \t scroll.setViewportView(textArea); \t \t \t \t \t \t \t \t panelHome.add(滾動);' –
@ Q.One:如果你的代碼不能正常工作,顯示更新的代碼作爲編輯你的問題,但最好的,如果它是一個小工作計劃,[mcve]或[sscce](http://sscce.org)(請查看鏈接)。 –