Java JPanel不在JFrame中显示?

Java JPanel不在JFrame中显示?,java,swing,jpanel,Java,Swing,Jpanel,我正在用Java创建一个MP3tager应用程序,使用JAudioTagger 该应用程序实际上显示了曲目的标题、编号、专辑、艺术家、年份、流派以及元数据中包含的评论。 它应该在主框架一角的JPanel上显示相册的艺术作品。。。但事实并非如此。 我认为Jpanel不起作用:它既不显示JTextField也不显示Button。。。 守则: class JPanelArt extends JComponent { private static final long serialVersio

我正在用Java创建一个MP3tager应用程序,使用JAudioTagger 该应用程序实际上显示了曲目的标题、编号、专辑、艺术家、年份、流派以及元数据中包含的评论。 它应该在主框架一角的JPanel上显示相册的艺术作品。。。但事实并非如此。 我认为Jpanel不起作用:它既不显示JTextField也不显示Button。。。 守则:

class JPanelArt extends JComponent {

    private static final long serialVersionUID = 1L;
    private Image image;

    public JPanelArt() {
        try {
            image = ImageIO.read(new File("res/download.jpg"));
        } catch (IOException e) {}
    }

    protected void paintComponent(Graphics g) {
        if (image == null)
            return;
        g.drawImage(image, 0, 0, null);
    }

}
框架类别:

public class Mp3TaggerFrame extends JFrame {


private static final long serialVersionUID = 1L;

    static AudioFile mp3;

    private JPanel contentPane;
    private JPanelArt albumArt;
    private JLabel imageArt;
    private JTextField titleTrack;
    private JTextField artist;
    private JTextField album;
    private JTextField genre;
    private JTextField trackNumber;
    private JTextField lenght;
    private JTextField year;
    private JTextField comment;
    private JTextField bitRate;

    JFileChooser chooser = new JFileChooser();
    FileNameExtensionFilter filter = new FileNameExtensionFilter("Mp3 File",
            "mp3");

    public void setAlbumArt(BufferedImage _image) {


    }

    public String getTitleTrack() {
        return titleTrack.getText();
    }

    public void setTitleTrack(String title) {
        this.titleTrack.setText(title);
    }

    public String getArtist() {
        return artist.getText();
    }

    public void setArtist(String artist) {
        this.artist.setText(artist);
    }

    public String getAlbum() {
        return album.getText();
    }

    public void setAlbum(String album) {
        this.album.setText(album);
    }

    public String getGenre() {
        return genre.getText();
    }

    public void setGenre(String genre) {
        this.genre.setText(genre);
    }

    public int getTrackNumber() {
        return Integer.valueOf(trackNumber.getText());
    }

    public void setTrackNumber(String string) {
        this.trackNumber.setText(string);
    }

    public void setLenght(int lenght) {
        int min = 0;
        int sec = lenght;
        while (sec >= 60) {
            sec = sec - 60;
            min++;
        }
        this.lenght.setText(String.valueOf(min) + ":" + String.valueOf(sec));
    }

    public int getYear() {
        return Integer.valueOf(year.getText());
    }

    public void setYear(String year) {
        this.year.setText(year);
    }

    public String getComment() {
        return comment.getText();
    }

    public void setComment(String comment) {
        this.comment.setText(comment);
    }

    public String getBitRate() {
        return bitRate.getText();
    }

    public void setBitRate(String bitRate) {
        this.bitRate.setText(bitRate);
    }

    /**
     * Create the frame.
     */
    public Mp3TaggerFrame() {
        try {
            UIManager.setLookAndFeel(new SyntheticaBlackStarLookAndFeel());
        } catch (Exception e) {
        }

        chooser.setFileFilter(filter);

        setFont(new Font("Century Schoolbook", Font.PLAIN, 14));
        setResizable(false);
        setTitle("Mp3Tagger");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 562, 423);

        setIconImage(new ImageIcon("res/Icon.png").getImage());

        JMenuBar menuBar = new JMenuBar();
        setJMenuBar(menuBar);

        JMenu mnFile = new JMenu("File");
        menuBar.add(mnFile);

        JMenuItem openMp3File = new JMenuItem("Open Mp3 File");
        mnFile.add(openMp3File);
        openMp3File.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                openFile();
            }
        });

        JMenuItem saveWithNewTag = new JMenuItem("Save With New Tag");
        mnFile.add(saveWithNewTag);
        saveWithNewTag.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                saveFile();
            }
        });

        JMenuItem mntmExit = new JMenuItem("Exit");
        mnFile.add(mntmExit);

        JMenu mnAbout = new JMenu("About");
        menuBar.add(mnAbout);

        JMenuItem mntmAboutTheProgram = new JMenuItem("About The Program");
        mnAbout.add(mntmAboutTheProgram);

        JMenuItem mntmContacts = new JMenuItem("Contacts");
        mnAbout.add(mntmContacts);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel lblTitle = new JLabel("Title:");
        lblTitle.setFont(new Font("DokChampa", Font.PLAIN, 15));
        lblTitle.setBounds(6, 6, 122, 28);
        contentPane.add(lblTitle);

        titleTrack = new JTextField();
        titleTrack.setToolTipText("Title Of The Track");
        titleTrack.setBounds(6, 32, 122, 28);
        contentPane.add(titleTrack);
        titleTrack.setColumns(10);

        JLabel lblArtist = new JLabel("Artist:");
        lblArtist.setFont(new Font("DokChampa", Font.PLAIN, 15));
        lblArtist.setBounds(6, 72, 122, 28);
        contentPane.add(lblArtist);

        artist = new JTextField();
        artist.setToolTipText("Artist");
        artist.setColumns(10);
        artist.setBounds(6, 98, 122, 28);
        contentPane.add(artist);

        JLabel lblAlbum = new JLabel("Album:");
        lblAlbum.setFont(new Font("DokChampa", Font.PLAIN, 15));
        lblAlbum.setBounds(6, 138, 122, 28);
        contentPane.add(lblAlbum);

        album = new JTextField();
        album.setToolTipText("Album");
        album.setColumns(10);
        album.setBounds(6, 164, 122, 28);
        contentPane.add(album);

        JLabel lblGenre = new JLabel("Genre:");
        lblGenre.setFont(new Font("DokChampa", Font.PLAIN, 15));
        lblGenre.setBounds(6, 270, 122, 28);
        contentPane.add(lblGenre);

        genre = new JTextField();
        genre.setToolTipText("Genre Of The Track");
        genre.setColumns(10);
        genre.setBounds(6, 296, 122, 28);
        contentPane.add(genre);

        JLabel lblTrackNumber = new JLabel("Track Number:");
        lblTrackNumber.setFont(new Font("DokChampa", Font.PLAIN, 15));
        lblTrackNumber.setBounds(6, 204, 122, 28);
        contentPane.add(lblTrackNumber);

        trackNumber = new JTextField();
        trackNumber.setToolTipText("Number of the track in the album");
        trackNumber.setColumns(10);
        trackNumber.setBounds(6, 230, 122, 28);
        contentPane.add(trackNumber);

        JLabel lblAlbumArt = new JLabel("Album Art");
        lblAlbumArt.setFont(new Font("DokChampa", Font.PLAIN, 15));
        lblAlbumArt.setBounds(375, 6, 73, 28);
        contentPane.add(lblAlbumArt);

        albumArt = new JPanelArt();
        albumArt.setToolTipText("The Album Cover");
        albumArt.setBounds(375, 192, 150, -150);
        contentPane.add(albumArt);

        JLabel lblLenght = new JLabel("Lenght");
        lblLenght.setFont(new Font("DokChampa", Font.PLAIN, 15));
        lblLenght.setBounds(375, 204, 122, 28);
        contentPane.add(lblLenght);

        lenght = new JTextField();
        lenght.setEditable(false);
        lenght.setToolTipText("Lenght of the song");
        lenght.setColumns(10);
        lenght.setBounds(375, 230, 122, 28);
        contentPane.add(lenght);

        JButton editAlbumArt = new JButton("Edit");
        editAlbumArt.setBounds(460, 6, 55, 28);
        contentPane.add(editAlbumArt);

        JLabel lblYear = new JLabel("Year:");
        lblYear.setFont(new Font("DokChampa", Font.PLAIN, 15));
        lblYear.setBounds(181, 6, 122, 28);
        contentPane.add(lblYear);

        year = new JTextField();
        year.setToolTipText("Year Of The Track");
        year.setColumns(10);
        year.setBounds(181, 32, 122, 28);
        contentPane.add(year);

        JLabel lblComments = new JLabel("Comments:");
        lblComments.setFont(new Font("DokChampa", Font.PLAIN, 15));
        lblComments.setBounds(181, 72, 122, 28);
        contentPane.add(lblComments);

        comment = new JTextField();
        comment.setToolTipText("Comments Of The Track");
        comment.setColumns(10);
        comment.setBounds(181, 98, 122, 160);
        contentPane.add(comment);

        JLabel lblBitrate = new JLabel("Bit Rate");
        lblBitrate.setFont(new Font("DokChampa", Font.PLAIN, 15));
        lblBitrate.setBounds(375, 270, 122, 28);
        contentPane.add(lblBitrate);

        bitRate = new JTextField();
        bitRate.setToolTipText("BitRate of the song");
        bitRate.setEditable(false);
        bitRate.setColumns(10);
        bitRate.setBounds(375, 296, 122, 28);
        contentPane.add(bitRate);
    }

    private void openFile() {
        if (chooser.showOpenDialog(chooser) == JFileChooser.APPROVE_OPTION) {
            try {
                mp3 = AudioFileIO.read((new File(chooser.getSelectedFile()
                        .getAbsolutePath())));
            } catch (CannotReadException | IOException | TagException
                    | ReadOnlyFileException | InvalidAudioFrameException e) {
                e.printStackTrace();
            }
        } else
            System.out.println("Nessun File Selezionato");

        setTextFields();

    }

    private void setTextFields() {
        Tag tag = mp3.getTag();
        AudioHeader ah = mp3.getAudioHeader();

        setTitleTrack(tag.getFirst(FieldKey.TITLE));
        setAlbum(tag.getFirst(FieldKey.ALBUM));
        setArtist(tag.getFirst(FieldKey.ARTIST));
        setGenre(tag.getFirst(FieldKey.GENRE));
        setTrackNumber(tag.getFirst(FieldKey.TRACK));
        setLenght(ah.getTrackLength());
        setYear(tag.getFirst(FieldKey.YEAR));
        setComment(tag.getFirst(FieldKey.COMMENT));
        setBitRate(ah.getBitRate() + "Kbs");
        try {
            setAlbumArt((BufferedImage) tag.getFirstArtwork().getImage());
        } catch (IOException e) {
            e.printStackTrace();
        }

    }


    private void saveFile() {


    }
}

请注意,JPanelArt是一个JComponent而不是JFrame。定义中指出“op级别的Swing容器——如JFrame、JDialog和JApplet——是专门的组件,为其他Swing组件提供了自己绘制的位置”。您可以尝试两种解决方案:

  • 使JPanelArt扩展
    JPanel
    ,而不是
    JComponent
  • mp3tagerframe
    类中包含一个JPanel,在
    mp3tagerframe
    构造函数中包含创建代码,并将绘图部分包含到
    mp3tagerframe
    paint()方法中(在这种情况下,必须包含一些
    getGraphics
    ,才能获得面板图形)
  • 我希望有帮助

    你是怎么做的?我还是看不见面板

    我做了一些更改,但在(开始)制作MCVE的过程中,我得到了这段代码来制作上面的图像

    import java.awt.*;
    import java.awt.event.*;
    import java.awt.image.BufferedImage;
    import javax.swing.*;
    import javax.swing.border.EmptyBorder;
    import javax.swing.filechooser.FileNameExtensionFilter;
    
    public class Mp3TaggerFrame extends JFrame {
    
        private static final long serialVersionUID = 1L;
    
        private JPanel contentPane;
        private JPanel albumArt;
        private JLabel imageArt;
        private JTextField titleTrack;
        private JTextField artist;
        private JTextField album;
        private JTextField genre;
        private JTextField trackNumber;
        private JTextField lenght;
        private JTextField year;
        private JTextField comment;
        private JTextField bitRate;
    
        public static void main(String[] args) {
            new Mp3TaggerFrame().setVisible(true);
        }
    
        JFileChooser chooser = new JFileChooser();
        FileNameExtensionFilter filter = new FileNameExtensionFilter("Mp3 File",
                "mp3");
    
        public void setAlbumArt(BufferedImage _image) {
    
        }
    
        public String getTitleTrack() {
            return titleTrack.getText();
        }
    
        public void setTitleTrack(String title) {
            this.titleTrack.setText(title);
        }
    
        public String getArtist() {
            return artist.getText();
        }
    
        public void setArtist(String artist) {
            this.artist.setText(artist);
        }
    
        public String getAlbum() {
            return album.getText();
        }
    
        public void setAlbum(String album) {
            this.album.setText(album);
        }
    
        public String getGenre() {
            return genre.getText();
        }
    
        public void setGenre(String genre) {
            this.genre.setText(genre);
        }
    
        public int getTrackNumber() {
            return Integer.valueOf(trackNumber.getText());
        }
    
        public void setTrackNumber(String string) {
            this.trackNumber.setText(string);
        }
    
        public void setLenght(int lenght) {
            int min = 0;
            int sec = lenght;
            while (sec >= 60) {
                sec = sec - 60;
                min++;
            }
            this.lenght.setText(String.valueOf(min) + ":" + String.valueOf(sec));
        }
    
        public int getYear() {
            return Integer.valueOf(year.getText());
        }
    
        public void setYear(String year) {
            this.year.setText(year);
        }
    
        public String getComment() {
            return comment.getText();
        }
    
        public void setComment(String comment) {
            this.comment.setText(comment);
        }
    
        public String getBitRate() {
            return bitRate.getText();
        }
    
        public void setBitRate(String bitRate) {
            this.bitRate.setText(bitRate);
        }
    
        /**
         * Create the frame.
         */
        public Mp3TaggerFrame() {
    
            chooser.setFileFilter(filter);
    
            setFont(new Font("Century Schoolbook", Font.PLAIN, 14));
            setResizable(false);
            setTitle("Mp3Tagger");
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setBounds(100, 100, 562, 423);
    
            setIconImage(new ImageIcon("res/Icon.png").getImage());
    
            JMenuBar menuBar = new JMenuBar();
            setJMenuBar(menuBar);
    
            JMenu mnFile = new JMenu("File");
            menuBar.add(mnFile);
    
            JMenuItem openMp3File = new JMenuItem("Open Mp3 File");
            mnFile.add(openMp3File);
            openMp3File.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    openFile();
                }
            });
    
            JMenuItem saveWithNewTag = new JMenuItem("Save With New Tag");
            mnFile.add(saveWithNewTag);
            saveWithNewTag.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent arg0) {
                    saveFile();
                }
            });
    
            JMenuItem mntmExit = new JMenuItem("Exit");
            mnFile.add(mntmExit);
    
            JMenu mnAbout = new JMenu("About");
            menuBar.add(mnAbout);
    
            JMenuItem mntmAboutTheProgram = new JMenuItem("About The Program");
            mnAbout.add(mntmAboutTheProgram);
    
            JMenuItem mntmContacts = new JMenuItem("Contacts");
            mnAbout.add(mntmContacts);
            contentPane = new JPanel();
            contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
            setContentPane(contentPane);
            contentPane.setLayout(null);
    
            JLabel lblTitle = new JLabel("Title:");
            lblTitle.setFont(new Font("DokChampa", Font.PLAIN, 15));
            lblTitle.setBounds(6, 6, 122, 28);
            contentPane.add(lblTitle);
    
            titleTrack = new JTextField();
            titleTrack.setToolTipText("Title Of The Track");
            titleTrack.setBounds(6, 32, 122, 28);
            contentPane.add(titleTrack);
            titleTrack.setColumns(10);
    
            JLabel lblArtist = new JLabel("Artist:");
            lblArtist.setFont(new Font("DokChampa", Font.PLAIN, 15));
            lblArtist.setBounds(6, 72, 122, 28);
            contentPane.add(lblArtist);
    
            artist = new JTextField();
            artist.setToolTipText("Artist");
            artist.setColumns(10);
            artist.setBounds(6, 98, 122, 28);
            contentPane.add(artist);
    
            JLabel lblAlbum = new JLabel("Album:");
            lblAlbum.setFont(new Font("DokChampa", Font.PLAIN, 15));
            lblAlbum.setBounds(6, 138, 122, 28);
            contentPane.add(lblAlbum);
    
            album = new JTextField();
            album.setToolTipText("Album");
            album.setColumns(10);
            album.setBounds(6, 164, 122, 28);
            contentPane.add(album);
    
            JLabel lblGenre = new JLabel("Genre:");
            lblGenre.setFont(new Font("DokChampa", Font.PLAIN, 15));
            lblGenre.setBounds(6, 270, 122, 28);
            contentPane.add(lblGenre);
    
            genre = new JTextField();
            genre.setToolTipText("Genre Of The Track");
            genre.setColumns(10);
            genre.setBounds(6, 296, 122, 28);
            contentPane.add(genre);
    
            JLabel lblTrackNumber = new JLabel("Track Number:");
            lblTrackNumber.setFont(new Font("DokChampa", Font.PLAIN, 15));
            lblTrackNumber.setBounds(6, 204, 122, 28);
            contentPane.add(lblTrackNumber);
    
            trackNumber = new JTextField();
            trackNumber.setToolTipText("Number of the track in the album");
            trackNumber.setColumns(10);
            trackNumber.setBounds(6, 230, 122, 28);
            contentPane.add(trackNumber);
    
            JLabel lblAlbumArt = new JLabel("Album Art");
            lblAlbumArt.setFont(new Font("DokChampa", Font.PLAIN, 15));
            lblAlbumArt.setBounds(375, 6, 73, 28);
            contentPane.add(lblAlbumArt);
    
            albumArt = new JPanel();
            BufferedImage bi = new BufferedImage(150,150,BufferedImage.TYPE_INT_RGB);
            albumArt.add(new JLabel(new ImageIcon(bi)));
            albumArt.setToolTipText("The Album Cover");
            albumArt.setBounds(375, 42, 150, 150);
            contentPane.add(albumArt);
    
            JLabel lblLenght = new JLabel("Lenght");
            lblLenght.setFont(new Font("DokChampa", Font.PLAIN, 15));
            lblLenght.setBounds(375, 204, 122, 28);
            contentPane.add(lblLenght);
    
            lenght = new JTextField();
            lenght.setEditable(false);
            lenght.setToolTipText("Lenght of the song");
            lenght.setColumns(10);
            lenght.setBounds(375, 230, 122, 28);
            contentPane.add(lenght);
    
            JButton editAlbumArt = new JButton("Edit");
            editAlbumArt.setBounds(460, 6, 55, 28);
            contentPane.add(editAlbumArt);
    
            JLabel lblYear = new JLabel("Year:");
            lblYear.setFont(new Font("DokChampa", Font.PLAIN, 15));
            lblYear.setBounds(181, 6, 122, 28);
            contentPane.add(lblYear);
    
            year = new JTextField();
            year.setToolTipText("Year Of The Track");
            year.setColumns(10);
            year.setBounds(181, 32, 122, 28);
            contentPane.add(year);
    
            JLabel lblComments = new JLabel("Comments:");
            lblComments.setFont(new Font("DokChampa", Font.PLAIN, 15));
            lblComments.setBounds(181, 72, 122, 28);
            contentPane.add(lblComments);
    
            comment = new JTextField();
            comment.setToolTipText("Comments Of The Track");
            comment.setColumns(10);
            comment.setBounds(181, 98, 122, 160);
            contentPane.add(comment);
    
            JLabel lblBitrate = new JLabel("Bit Rate");
            lblBitrate.setFont(new Font("DokChampa", Font.PLAIN, 15));
            lblBitrate.setBounds(375, 270, 122, 28);
            contentPane.add(lblBitrate);
    
            bitRate = new JTextField();
            bitRate.setToolTipText("BitRate of the song");
            bitRate.setEditable(false);
            bitRate.setColumns(10);
            bitRate.setBounds(375, 296, 122, 28);
            contentPane.add(bitRate);
        }
    
        private void openFile() {
        }
    
        private void setTextFields() {
        }
    
        private void saveFile() {
        }
    }
    

    您不需要
    JComponent#setVisible()
    ;调用
    JFrame#pack()
    然后调用
    JFrame#setVisible()
    。为了获得更多的指导,请编辑您的问题,使其包含一个展示您概述的问题的示例。仍然不起作用,我已经添加了所有框架类。我使用了eclipse的WindowBuilder插件来构建GUI
    contentPane.setLayout(null)Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作。因此,它们不利于像素完美布局。而是使用布局管理器,或与布局填充和边框一起使用。这也可能是小组没有出现的原因。。但是按照@trashgood的建议发布一个MCVE以获得更明确的答案。你是说你没有看到类似的东西吗?顺便说一句,我把相册上的艺术增加了50个像素,因为它与最后两个标签重叠了。哇,D:你是怎么做到的?我还是看不到面板…你试过第二种方法吗?此外,JPanelArt中没有尺寸定义。我不知道默认设置,但可能是因为它不是不可见的,只是太小而看不见吗?我通过setBounds()设置了面板的大小,注意它仍然是垃圾代码。当某物被移到窗口前面然后移开时,它会留下“画作”。与其使用
    null
    布局,不如使用布局管理器(或多个)进行布局。成功了!谢谢你的帮助!我将完成这一步,然后启动另一步,使用布局管理器创建GUI!