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

JPanelパネルでnullレイアウトではなくGridLayoutを使用し、ImageViewサイズを設定せずに、クラスにgetPreferredSize()適切なサイズのDimensionを返す意味のあるメソッドオーバーライドがあることを確認することをお勧めします。次に、コンポーネントを追加した後にJFrameを呼び出すとpack()、レイアウトマネージャーがサイズ設定を処理します。

于 2012-08-25T22:02:36.740 に答える
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 に答える