import javax.swing.*;import javax.swing.border.EtchedBorder;import java.awt.*;import static java.awt.GridBagConstraints.BOTH;public class mwe extends JFrame { private JPanel x, y, z, u,v,w,jtext; private class MyBorderedPanel extends JPanel { MyBorderedPanel( String title ) { this.setBorder(BorderFactory.createTitledBorder( BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), title )); } } private class MyTextPanel extends JPanel { JTextArea textArea; MyTextPanel( String title ) { textArea= new JTextArea(); this.setBorder(BorderFactory.createTitledBorder( BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), title)); this.setLayout(new BorderLayout()); JScrollPane pane= new JScrollPane(); pane.add(textArea); textArea.setLineWrap(true); textArea.setWrapStyleWord(true); this.add(pane); } } public mwe() { x= new MyBorderedPanel("x"); y= new MyBorderedPanel("y"); z= new MyBorderedPanel("z"); u= new MyBorderedPanel("u"); v= new MyBorderedPanel("v"); w= new MyBorderedPanel("w"); jtext= new MyTextPanel("textArea"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); manageLayout(); } private void manageLayout() { this.setLayout(new GridBagLayout()); GridBagConstraints constraints = new GridBagConstraints(); constraints.fill = BOTH; } }我有上面的代码模拟了应用于 GridBagLayout() 的黄金比例的想法。输出如下:现在,您可以看到 TextArea 是空的。我希望它的托管面板基本上充满“白色”空间,即使此时文本区域是空的。我记得在 SE 读到过这BorderLayout是可行的方法,所以我尝试了。因此,本质上,我希望文本区域将其托管面板填充到边缘,并且滚动窗格也可见。如何实现这一目标?上述 MWE 中最相关的代码可能是 MyTextPanel 类。
1 回答
陪伴而非守候
TA贡献1757条经验 获得超8个赞
现在,正如您所看到的,TextArea 是空的。
这是因为您实际上尚未将文本区域添加到滚动窗格。
JScrollPane pane= new JScrollPane(); pane.add(textArea);
上面的代码是错误的。您不必将组件直接“添加”到 JScrollPane 中。
相反,您可以将组件添加JViewport
到JScrollPane
.
这是通过执行以下任一操作来完成的:
JScrollPane pane= new JScrollPane(textArea);
这会将文本区域添加到视口,或者
JScrollPane pane= new JScrollPane(); pane.setViewportView(textArea);
添加回答
举报
0/150
提交
取消