我试图将JScrollPane添加到我的JTextArea,但不知何故,它不会出现。 我已经尝试根据JTextArea的维度调整它的大小,但它似乎不起作用。另外,请注意我使用的是null布局,因为我希望在指尖位置显示某些按钮和面板的全面灵活性。
import java.awt.Dimension;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.JTextArea;
public class PaneTester{
private static JFrame frame;
private static JPanel panel;
private static JScrollPane scrollPane;
private static JTextArea notificationBox;
public static void main (String [] args){
stage1();
stage2();
}
private static void stage1(){
createFrame();
createPanel();
frame.getContentPane().add(panel);
panel.setVisible(true);
frame.setVisible(true);
}
private static void stage2(){
generateNotificationBox();
}
private static void createFrame(){
frame = new JFrame();
frame.setSize(new Dimension(900,700));
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(true);
}
private static void createPanel(){
panel = new JPanel();
panel.setLayout(null);
generateGridButtons();
}
private static void generateGridButtons(){
short y = 0;
for(short i=0;i<4;i++){
y += 60;
short x = 500;
for(short j=0;j<5;j++){
JButton gridButton = new JButton();
gridButton.setBounds(x, y,120,60);
panel.add(gridButton);
x += 140;
}
}
}
public static void generateNotificationBox(){
notificationBox = new JTextArea(10,10);
notificationBox.setBounds(25, 25, 200, 400);
scrollPane = new JScrollPane(notificationBox, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS );
Dimension d = new Dimension(notificationBox.getPreferredSize());
scrollPane.getViewport().setPreferredSize(d);
scrollPane.getViewport().add(notificationBox);
panel.add(notificationBox);
panel.repaint();
}
}
答案 0 :(得分:3)
停止与setBounds
和setPreferredSize
混在一起,你只是让自己的生活变得更加困难。
如果您想影响JTextArea
的大小(以及JScrollPane
的可见区域),请查看JTextArea
构造函数JTextArea(int rows, int columns
),这样您就可以指定JTextArea
默认为的行/列数,以及允许JTextArea
根据当前字体的指标以更稳定的跨平台方式计算preferredSize
的行数/列数
然而,你的核心问题就在这里......
scrollPane.getViewport().add(notificationBox);
panel.add(notificationBox);
您将notificationBox
添加到JScrollPane
s JViewport
,这很好,但随后您将notificationBox
添加到panel
,这会将其删除来自JScrollPane
的{{1}},这是不好的
而是将JViewport
添加到JScrollPane
panel
你也过度使用scrollPane.getViewport().add(notificationBox);
panel.add(scrollPane);
。我强烈建议你花点时间将static
降低到它的绝对最低要求用量,这可能意味着在static
方法中构建用户界面,你有一个“主”类您可以进行初始设置(来自main
)进行初始设置 - 恕我直言
我试过了。我认为其他人建议从另一个帖子中提出,但是当我尝试这个时,它只是从面板上完全拿走了JTextArea
摆脱main
并开始使用适当的布局管理器和复合布局。首先查看Laying Out Components Within a Container了解更多详情