[英]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.