gpt4 book ai didi

java - JScrollPane 无法正常工作

转载 作者:行者123 更新时间:2023-11-29 05:53:56 25 4
gpt4 key购买 nike

我有一个 GUI,其中左侧包含图像,右侧是包含一些标签对象的面板。我想要这样,如果右侧面板上的对象多于容纳不下的对象,则会出现一个滚动条。

我遇到的问题是,当很多对象被添加到右侧面板时,整个框架都会调整大小。

这是一些截图。第一个是我希望窗口始终保持的大小,第二个图像显示了调整大小的问题。

Correct size第二张图片: Incorrect size

这是包含图像面板和侧边栏面板的面板的代码:

/**
* image panel - displays image and editing area
*/
ImagePanel imagePanel = null;

// Holds the labels
private LabelHolder lHolder = new LabelHolder();

/**
* handles New Object button action
*/
public void addNewPolygon() {
imagePanel.addNewPolygon(null);
}

public ContainerPanel(String imageFilename, JFrame frame) {
//setup main window panel
addComponents(imageFilename, frame);
}

public void addComponents(String imageFilename, JFrame frame) {
setLayout(new FlowLayout());

// Polygon Title
JLabel labelPanelTitle = new JLabel("<html><b>Polygons</b></html>");
labelPanelTitle.setBorder(new EmptyBorder(0, 0, 0, 150));
Font f = new Font("LabelPanel", Font.PLAIN, 24);
labelPanelTitle.setFont(f);
labelPanelTitle.setAlignmentX(CENTER_ALIGNMENT);

// Create and set up the image panel.
try {
imagePanel = new ImagePanel(imageFilename, frame, this);
} catch (Exception e1) {
e1.printStackTrace();
}
imagePanel.setOpaque(true); //content panes must be opaque

JPanel objectsPanel = new JPanel();
objectsPanel.setLayout(new BoxLayout(objectsPanel, BoxLayout.Y_AXIS));

JPanel labelHolderContainer = new JPanel();
labelHolderContainer.setLayout(new BoxLayout(labelHolderContainer, BoxLayout.Y_AXIS));

labelHolderContainer.add(lHolder);

JScrollPane scroller = new JScrollPane(labelHolderContainer);

// add the title
objectsPanel.add(labelPanelTitle);
// Add a spacer
objectsPanel.add(Box.createRigidArea(new Dimension(0,25)));
// Add all the labels
objectsPanel.add(scroller);

addNewLabel("Some Object");
addNewLabel("Some Object");
addNewLabel("Some Object");
addNewLabel("Some Object");
addNewLabel("Some Object");
addNewLabel("Some Object");
addNewLabel("Some Object");
addNewLabel("Some Object");
addNewLabel("Some Object");
addNewLabel("Some Object");
// addNewLabel("Some Object");
// addNewLabel("Some Object");
// addNewLabel("Some Object");
// addNewLabel("Some Object");

add(imagePanel);
add(Box.createRigidArea(new Dimension(10,0)));
add(objectsPanel);

}

public void addNewLabel(String labelName) {
lHolder.add(new Label(labelName, imagePanel.getCurrentColour()));
lHolder.add(Box.createRigidArea(new Dimension(10,10)));

// set new colour
imagePanel.setCurrentColour(imagePanel.getRandomColour());
}

最佳答案

  • 必须覆盖 JScrollPane 的父级的最大大小,或覆盖 JPanel(在 JScrollPane 内)以保持图片上显示的任何内容,不知道如何尽快发布 SSCCE 以获得更好的帮助

  • 如果您想要自然滚动(将 Icons 与叙述放在一起没有问题)然后

  • 使用 JList

  • 使用 JTable用一列

编辑

从方法中删除 JFrame#pack()add/modify/remove 中的项目JScrollPane,否则无法在屏幕上更改顶级容器的大小

关于java - JScrollPane 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12893488/

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