我尝试了很多布局管理器,但没有一个可以解决我的问题:
任何解决方案?
JScrollPane materialPane = new FScrollPane();
this.materialPaneView = new TPanel();
this.materialPaneView.setMinimumSize(new Dimension((int)(WIDTH*0.95), (int)(HEIGHT/2)));
this.materialPaneView.setLayout(new BoxLayout(this.materialPaneView, BoxLayout.Y_AXIS));
materialPane.setViewportView(materialPaneView);
materialPane.setMinimumSize(new Dimension((int)(WIDTH*0.95), (int)(HEIGHT/2)));
for(Material mat: this.unit.getMaterial()){
this.addMaterial(mat);
}
centerPanel.add(sectionPane);
centerPanel.add(exercisePane);
centerPanel.add(materialPane);
this.add(upperPanel, BorderLayout.NORTH);
this.add(centerPanel, BorderLayout.CENTER);
public void addMaterial(Material mat){
JTextField matName = new JTextField(30);
JPanel fieldButtonPanel = new TPanel();
fieldButtonPanel.setLayout(new GridLayout(1,2));
JPanel fieldPanel = new TPanel(new FlowLayout(FlowLayout.LEFT));
JPanel deleteMatButtonPanel = new TPanel(new FlowLayout(FlowLayout.RIGHT));
matName.setText(mat.getName());
matName.setMaximumSize(new Dimension(FFont.def.getSize()*20, 30));
fieldPanel.add(matName);
JButton deleteMat = new JButton("Delete Material");
deleteMatButtonPanel.add(deleteMat);
fieldButtonPanel.add(fieldPanel);
fieldButtonPanel.add(deleteMatButtonPanel);
fieldButtonPanel.setAlignmentX(LEFT_ALIGNMENT);
JTextArea matText = new FTextArea(mat.getDesc(), (int)(WIDTH*0.95), (int)(HEIGHT/3.4));
matText.setMinimumSize(new Dimension((int)(WIDTH*0.95), (int)(HEIGHT/3.5)));
/*matText.setMaximumSize(new Dimension((int)(WIDTH*0.95), (int)(HEIGHT/3.4)));*/
matText.setText(mat.getDesc());
matText.setAlignmentX(LEFT_ALIGNMENT);
this.materialPaneView.add(fieldButtonPanel);
this.materialPaneView.add(matText);
matName.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
mat.setName(matName.getText());
}
});
HEIGHT和WIDTH是常量,TPanel FScrollPane是我预定义的透明面板。 BoxLayout面板是scrollPane的视口,但仍会调整文本区域的大小。
答案 0 :(得分:1)
我不确定我能得到你所要求的,所以请告诉我,如果我完全错过了这一点......
据我所知,Viewport大小由JScrollPane中的组件控制,无论视口发生什么,JScrollPane大小都不会改变。
您要么:
A)将JScrollPane的大小调整为与其内容相同的大小。
我会实现侦听器以查找内容大小更改并相应地调整ScrollPane的大小,但您也需要注意调整整个层次结构的大小。
B)您想要调整视口大小以使其适合JScrollPane吗?你知道没有滚动条。
我遇到了这个问题,并使用ScrollablePanel组件修复了它。检查此answer,按照链接下载.class并使用它来使用调整大小以适合ScrollPane的JPanel。
那些不是非常详细的答案,但在扩展之前我需要更多关于你要做什么的信息。并且您的代码不完整,总是共享一个我们可以CTRL + C / V的代码,并且很容易在最终验证问题。