我正在尝试创建一个包含3个文本字段的JPanel。除textArea3
之外的所有其他内容(包括按钮)都已放置到位。最后的面板是这样的。如图所示,textArea3
使用整个JFrame而不是遵循setBounds方法。
//Text Area 1
JTextArea textArea = new JTextArea();
JScrollPane jScrollPane1 = new JScrollPane(textArea);
jScrollPane1.setVerticalScrollBarPolicy(
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
jScrollPane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
textArea.setWrapStyleWord(true);
textArea.setLineWrap(true);
textArea.setFont(new Font("Consolas", Font.LAYOUT_LEFT_TO_RIGHT, 20));
JTextArea textArea2 = new JTextArea();
JScrollPane jScrollPane2 = new JScrollPane(textArea2);
jScrollPane2.setVerticalScrollBarPolicy(
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
jScrollPane2.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
textArea2.setWrapStyleWord(true);
textArea2.setLineWrap(true);
textArea2.setFont(new Font("Consolas", Font.LAYOUT_LEFT_TO_RIGHT, 20));
//Text Area 3
JTextField textArea3 = new JTextField();
textArea3.setFont(new Font("Consolas", Font.LAYOUT_LEFT_TO_RIGHT, 20));
jScrollPane1.setBounds(30,30,300,300);
jScrollPane2.setBounds(30,400,200,200);
//textArea3 is not working
textArea3.setBounds(600,800,100,50);
button2.setBounds(350,30,80,30);
button1.setBounds(350,400,80,30);
frame.add(button1);
frame.add(button2);
frame.add(jScrollPane2);
frame.add(jScrollPane1);
frame.add(textArea3);
frame.setVisible(true);
编辑:因此,这可能是JDK中的错误。我制作了另一个称为类框架的类,并设置了产生文本区域等的方法。
答案 0 :(得分:0)
如您在图片中所见,textArea3使用整个JFrame而不是遵循setBounds方法。
不,我看不到。我看到5个组件。我看不到任何使用整个框架的组件。
如果实际上您确实看到文本区域占据了整个框架,那是因为:
BorderLayout
其他组件恰好出现是因为您手动设置了每个组件的边界。
您不应尝试设置组件的边界。布局管理器的工作是设置每个组件的大小和位置。
因此解决方案是摆脱所有setBounds()语句并使用布局管理器。
阅读Layout Managers上Swing教程中的部分,以获取更多信息。看来您想使用网格,因此可以使用GridBagLayout
。
此外,当您创建JTextArea时,应使用类似以下内容的东西:
JTextArea textArea = new JTextArea(15, 20);
这将允许文本区域计算其大小,以便显示15行,每行大约显示20个字符。大小将根据所使用的字体进行计算。