2014-11-21 2 views
1

Я создаю приложение mp3Tagger в Java, используя JAudioTagger http://www.jthink.net/jaudiotagger/ Приложение фактически отображает название трека, номер, альбом, исполнителя, год, жанр и комментарии, включенные в метаданные. Он должен показать обложку альбома на JPanel в углу главного JFrame ... Но это не так. Я думаю, что JPanel не работает: он не показывает ни JTextField или кнопку ... Код:JPanel не отображается в JFrame?

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() { 


    } 
} 
+3

Вам не нужен 'JComponent # setVisible()'; вызов 'JFrame # pack()' _then_ 'JFrame # setVisible()'. Для получения дополнительных рекомендаций, пожалуйста, отредактируйте свой вопрос, включив в него [полный пример] (http://stackoverflow.com/help/mcve), в котором представлена ​​проблема, которую вы наметили. – trashgod

+0

Все еще не работает, я добавил весь класс кадров. Я использовал Window Builder Plug-in для eclipse для создания GUI – Marvin

+0

'contentPane.setLayout (null);' Java GUIs должны работать на разных ОС, размер экрана, разрешение экрана и т. Д. Таким образом, они не способствуют до идеального макета пикселя. Вместо этого используйте диспетчеры макетов или [их комбинации] (http://stackoverflow.com/a/5630271/418556), а также макет и границы для [пробела] (http://stackoverflow.com/a/17874718/ 418556). Вероятно, также, почему панель не появляется. Но опубликуйте MCVE, как советовал @trashgod для более конкретных ответов. –

ответ

3

Как вы это делаете? Я до сих пор не в состоянии увидеть панель ..

enter image description here

Я сделал некоторые изменения, но в процессе (начало), чтобы сделать 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() { 
    } 
} 
+1

Обратите внимание, что это еще код мусора.Когда что-то перемещается перед окном, а затем уходит, оно оставляет «артефакты краски». Вместо того, чтобы использовать макеты «null», он должен быть выложен менеджером макета (или несколькими). –

+0

http://imgur.com/SeL8Nsn сделал это! Спасибо вам за помощь! Я закончу этот, и я начну с другого, чтобы создать графический интерфейс с менеджером макетов! – Marvin

0

Пожалуйста, обратите внимание, что JPanelArt является JComponent, а не JFrame. В определении указано, что «контейнеры Swing на уровне op, такие как JFrame, JDialog и JApplet, - это специализированные компоненты, которые предоставляют место другим компонентам Swing для рисования». Есть два решения, которые вы могли бы попробовать:

  1. Сделать JPanelArt расширяющих JPanel, вместо JComponent.
  2. Включите JPanel в вашем Mp3TaggerFrame классе, включает в себя код создания в Mp3TaggerFrame конструкторе и рисунок часть в paint() метод Mp3TaggerFrame (в данном случае, вы пустошь должны иметь некоторые getGraphics включены для того, чтобы получить графические панели) ,

Надеюсь, это поможет.

+0

Я сделал JPanelArt, расширив JPanel, и он все еще не работает ... – Marvin

+0

вы попробовали второй подход? Кроме того, в JPanelArt отсутствует определение размера. Я не знаю значения по умолчанию, но может быть, что это не невидимо, слишком мало, чтобы его можно было увидеть? – rlinden

+0

Я установил размер панели с помощью setBounds() – Marvin

Смежные вопросы