gpt4 book ai didi

java - 调整 JFrame 大小以适合 JPanel

转载 作者:行者123 更新时间:2023-11-30 03:32:40 26 4
gpt4 key购买 nike

我有一个 GUI,它由 JFrame 和菜单栏组成。 JFrame 内部是我的自定义面板(扩展 JPanel),它最初是隐藏的。用户选择一个图像(JFileChooser),该图像被传递到面板并绘制(使用paintIcon)。调整面板大小以适合图像,然后设置为可见。我想调整 JFrame 的大小以适合面板,但我似乎无法让它工作。我尝试过使用 pack() 方法,但这只是制作了一个很小的 ​​GUI,那就是 JMenu 的大小!我还尝试使用 ImageIcon 的 getIconWidth() 和 getIconHeight() 属性来调整框架和 JPanel 的大小,但是虽然这可以正确调整面板的大小,但它不会调整 JFrame 的大小。关于如何正确执行此操作有什么想法吗?

我设置 JFrame 大小的代码块在这里:

@Override
public void actionPerformed(ActionEvent e)
{

JFileChooser imgChooser = new JFileChooser();
JMenuItem evtSource = (JMenuItem) e.getSource();
String srcText = evtSource.getText();

if (srcText.equals("Add Image..."))
{
imgChooser = new JFileChooser();
imgChooser.showOpenDialog(frmMain);

chosenImage = imgChooser.getSelectedFile();
try
{
loadedImage = ImageIO.read(chosenImage);
}
catch (IOException ex)
{
String errorMsg = ex.getMessage();
JOptionPane.showMessageDialog(frmMain, "Error while loading file: " + errorMsg, "Error!", JOptionPane.ERROR_MESSAGE);
}

panelImage = new ImageIcon(loadedImage);

frmMain.setSize(panelImage.getIconWidth(), panelImage.getIconHeight() + mbMenu.getHeight());
displayImage.loadImage(panelImage);
displayImage.setVisible(true);

}
}

“displayImage”自定义面板相关部分的代码如下:

public void paintComponent(Graphics g) 
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;

if (imgIsLoaded)
{
panelImage.paintIcon(this,g2,0,0);
resizePanel(panelImage.getIconWidth(), panelImage.getIconHeight());

}
}

public void loadImage(ImageIcon i)
{
panelImage = i;
imgIsLoaded = true;
}

public void resizePanel(int w, int h)
{
this.setSize(w, h);
}

最佳答案

如果没有图像,则覆盖面板中的getPreferredSize()以返回默认值(例如400x400),否则返回图像的大小。

设置图像后,调用frame.pack()

顺便说一句 - 如果面板所做的只是绘制图像,我会选择 JLabel

关于java - 调整 JFrame 大小以适合 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28657880/

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