2

大家好,我正在尝试向我的 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

任何帮助是极大的赞赏。

4

2 回答 2

4

考虑这个程序:

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();
            }
        });         
    }
}

在此处输入图像描述

于 2012-08-25T22:15:45.050 回答
4

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

于 2012-08-25T22:02:36.740 回答