簡體   English   中英

調整JFrame的大小以適合JPanel

[英]Resizing JFrame to fit JPanel

我有一個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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM