【问题标题】:multiple 'imageviews' in jframejframe中的多个'imageviews'
【发布时间】:2012-08-20 23:51:11
【问题描述】:

大家好,我正在尝试向我的 jframe 添加多个组件。但我似乎无法让它工作。

private void initGUI() {
    setAlwaysOnTop(true);
    setUndecorated(true);

    AWTUtilities.setWindowOpaque(this, false);

    AWTUtilities.setWindowOpacity(this, 0.5f);
    setLocation(ini.getButtonsX(), ini.getButtonsY());
    setSize(ini.getButtonsW(), ini.getButtonsH());

    setLayout(null);

    JPanel panel = new JPanel();
    panel.setLayout(null);
    ImageView baron = new ImageView("image/nashor.png", 50, 50);
    baron.setBounds(50, 50, 50, 50);
    ImageView test = new ImageView("image/dragon.png", 50, 50);
    test.setBounds(50, 150, 50, 50);

    panel.add(baron);
    panel.add(test);

    panel.setBounds(0, 0, ini.getButtonsW(), ini.getButtonsH());

    add(panel);



}

我的 ImageView 是一个类,它扩展了一个绘制图像的 JPanel。

此时只画了 nashor

非常感谢任何帮助。

【问题讨论】:

  • "but i cant seem to get it to work." 可能无法告诉我们足够多的信息,无法让我们为您提供帮助。请告诉我们更多信息,例如发生了什么。
  • 我会说,作为一般规则,您应该避免使用空布局,因为使用某些布局管理器几乎总是更好。
  • 您想在面板中添加多个图像?
  • 如需尽快获得更好的帮助,请发帖SSCCE

标签: java image swing jframe panel


【解决方案1】:

考虑这个程序:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.awt.*;
import java.awt.event.*;
import javax.imageio.ImageIO;
import javax.swing.*;

public class Init extends JFrame{
    JPanel view = new JPanel();
    JMenuBar mBar = new JMenuBar();
    JMenu menu = new JMenu("File");
    JMenuItem mItemOpen = new JMenuItem("Open");
    JMenuItem mItemExit = new JMenuItem("Exit");
    JFileChooser fc = new JFileChooser();
    JTextField txtPath = new JTextField();

    BufferedImage myPicture;
    File filePath;
    String path;

    public Init(){
        mBar.add(menu);
        menu.add(mItemOpen);
        menu.addSeparator();
        menu.add(mItemExit);
        setJMenuBar(mBar);
        txtPath.setEditable(false);
        mItemOpen.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                fc.showOpenDialog(null);
                filePath = fc.getSelectedFile();
                path = filePath.getPath();
                txtPath.setText(path);
                try {
                    //view.removeAll();
                    myPicture = ImageIO.read(new File(path));
                    JLabel picLabel = new JLabel(new ImageIcon(myPicture));
                    view.add(picLabel);
                    revalidate();

                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        });
        setLayout(new BorderLayout());
        getContentPane().add(new JScrollPane(view),BorderLayout.CENTER);
        getContentPane().add(txtPath,BorderLayout.SOUTH);
        setTitle(".:My Picture Viewer:.");
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        //pack();
        setSize(1024,768);
        setVisible(true);
    }

    public static void main(String [] args){
        SwingUtilities.invokeLater(new Runnable(){
            public void run(){
                new Init();
            }
        });         
    }
}

【讨论】:

    【解决方案2】:

    我建议您让 JPanel 面板使用 GridLayout,而不是 null 布局,并且您不要设置 ImageView 大小,而是确保该类有一个有意义的 getPreferredSize() 方法覆盖,它返回一个 Dimension大小合适的。然后,如果您在添加组件后在 JFrame 上调用 pack(),布局管理器会为您调整大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-01
      • 2016-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-29
      相关资源
      最近更新 更多