gpt4 book ai didi

java - Swing JScrollPane 调整大小以适合视口(viewport)面板

转载 作者:行者123 更新时间:2023-12-02 13:17:29 25 4
gpt4 key购买 nike

我尝试了很多布局管理器,但没有一个能解决我的问题:

  • 我希望滚动 Pane 中的项目保持其大小(首选或最小),并且不调整大小(缩小)以适合视口(viewport)面板。因为如果它是一个 JTextArea,并且如果文本区域有空白区域并且它比视口(viewport)大,那么它会缩小它,因此空白文本区域将不会显示。我希望显示空白文本区域以解决外观问题。
  • 我使用 BoxLayout 将一项又一项堆叠起来,在我看来,对于文本区域,setMinimum 方法会失败。
  • 如果文本区域有空白,则ScrollPane的滚动条不会出现,只有在没有空白的情况下才会出现。

有什么解决办法吗?

    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 的视口(viewport),并且它仍然会调整文本区域的大小。

最佳答案

我不确定我是否明白你的要求,所以请告诉我我是否完全错过了重点......

据我所知,视口(viewport)大小是由 JScrollPane 内部的组件控制的,无论视口(viewport)发生什么情况,JScrollPane 大小都不会改变。

您要么想要:

A) 将 JScrollPane 的大小调整为与其内容相同的大小。

我将实现监听器来查找内容大小变化并相应地调整 ScrollPane 的大小,但您也需要注意调整整个层次结构的大小。

B) 您想要调整视口(viewport)大小以使其适合 JScrollPane 吗?你知道没有滚动条。

我遇到了这个问题,并通过使用 ScrollablePanel 组件修复了它。检查这个answer ,点击链接下载 .class 并使用它来使用调整大小以适合 ScrollPane 的 JPanel。

这些不是非常详细的答案,但在扩展之前我需要更多有关您正在尝试做什么的信息。而且您的代码不完整,请始终分享一个代码,我们可以 CTRL+C/V 并轻松验证问题。

关于java - Swing JScrollPane 调整大小以适合视口(viewport)面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43711478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com