gpt4 book ai didi

java - 将 JScrollPane 添加到 JPanel

转载 作者:行者123 更新时间:2023-11-30 04:10:55 26 4
gpt4 key购买 nike

我正在尝试从单独的类将 JScrollPane 添加到 JPanel。感谢到目前为止提出的一些问题,我可以帮助自己创建它们。但我的问题还是有点特殊。我想在 JPanel 上显示图像,如果图像对于面板来说太大,我想添加滚动条。但滚动条不会出现。(当我将 ScrollPaneConstants 设置为 ****_SCROLLBAR_​​ALWAYS 时,会出现栏的框架,但没有可滚动的栏)。

我想我必须将图像大小与条形图连接起来,以便它们出现?

我的一些代码:

主窗口

public class Deconvolutioner extends JFrame
{
Draw z;
Picturearea picturearea;

class Draw extends JPanel
{
public void paint(Graphics g)
{

}
}

public Deconvolutioner()
{
setTitle("Deconvolutioner");
setLocation(30,1);
setSize(1300,730);
super.setFont(new Font("Arial",Font.BOLD,11));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);

FlowLayout flow = new FlowLayout(FlowLayout.CENTER);

this.setLayout(flow);

picturearea = new Picturearea();
picturearea.setLayout(new GridBagLayout());

JScrollPane scrollPane = new JScrollPane(picturearea,
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);

scrollPane.setPreferredSize(new Dimension(1000, 664));

getContentPane().add(scrollPane, flow); // add scrollpane to frame


add(z = new Draw());
setVisible(true);

}
}

JPanel类

public class Picturearea extends JPanel
{
BufferedImage image;
int panelWidth, panelHeight, imageWidth, imageHeight;

public Picturearea()
{
setBackground(new Color(210,210,210));
setBorder(LineBorder.createBlackLineBorder());


setVisible(true);
}

@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(image, 0, 0, this);

}

public void setPicture(BufferedImage picture)
{
try
{
image = picture;
}
catch (Exception e)
{
System.err.println("Some IOException accured (did you set the right path?): ");
System.err.println(e.getMessage());
}
repaint();
}

}

感谢您的宝贵时间。

最佳答案

问题是 JScrollPane 无法知道它是否应该显示滚动条,因为它包含的 Picturearea 没有告诉任何有关其首选大小的信息(或者更确切地说,它根据其布局返回首选大小)以及它包含的组件。但由于它不包含任何组件,因此返回的首选大小可能是 (0, 0))。

我会简单地使用 JLabel 而不是自定义 Picturearea 类。 JLabel 可以很好地显示图像,并且当询问其首选尺寸时,它会返回适当的尺寸。

关于java - 将 JScrollPane 添加到 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19618570/

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