2014-12-03 86 views
0

我一直在尋找一個答案,但一切非常接近,但不是我有問題。擴展一個JPanel不會顯示

所以我的主類創建一個新的JFrame,增加了面板的內容面板,我添加scrollpanel到內容面板。

現在我創造我的一些擴展的JPanel類,將它們添加到滾動窗格和看到的只是一個空架。

而且我已經檢查,以確保有確實的列表FTPFile的

下面是主要代碼:

public browser(ftpHandler _FTP) { 

    FTP = _FTP; 
    Panels = new ArrayList<JPanel>(); 

    frame = new JFrame("File Browser"); 
    frame.setContentPane(mainPanel); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setPreferredSize(new Dimension(750, 500)); 
    frame.setSize(frame.getPreferredSize()); 
    frame.setMinimumSize(frame.getSize()); 

    mainPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); 

    listFiles(); 

    frame.pack(); 
    frame.setVisible(true); 
} 

public void listFiles(){ 
    Panels.clear(); 
    FTPFile[] list = null; 
    try { 
     list = FTP.listFiles(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    for(FTPFile file : list){ 
     fileObject FO = new fileObject(file); 
     Panels.add(FO); 
     scrollPane.add(FO); 
    } 

    scrollPane.updateUI(); 
} 

我的擴展JPanel中,文件對象

public class fileObject extends JPanel { 
private FTPFile file; 
private JLabel Label; 
private ImageIcon Icon; 
private int FileType; 
private final int IconSize = 25; 
private final Dimension panelSize = new Dimension(150, 40); 

public fileObject(FTPFile FILE){ 
    file = FILE; 
    FileType = file.getType(); 
    this.setSize(panelSize); 
    this.setPreferredSize(panelSize); 
    this.setMinimumSize(panelSize); 
    this.setLayout(new WrapLayout()); 

    switch (FileType){ 
     case FTPFile.TYPE_DIRECTORY: 
      Icon = resizeImage(new ImageIcon(getClass().getResource("/com/taylor/48px/folder.png")),IconSize); 
      break; 
     case FTPFile.TYPE_FILE: 
      try { 
       String FileExtension = file.getName().substring(file.getName().lastIndexOf(".")+1); 
       Icon = resizeImage(new ImageIcon(getClass().getResource("/com/taylor/48px/"+FileExtension+".png")),IconSize); 
      } catch(Exception e) { 
       Icon = resizeImage(new ImageIcon(getClass().getResource("/com/taylor/48px/_blank.png")),IconSize); 
      } 
      break; 
     case FTPFile.TYPE_LINK: 
      Icon = resizeImage(new ImageIcon(getClass().getResource("/com/taylor/48px/_page.png")),IconSize); 
      break; 
    } 
    Label = new JLabel(file.getName(), Icon, JLabel.LEFT); 
    this.add(Label); 

} 

private ImageIcon resizeImage(ImageIcon II, int Size){ 
    Image img = II.getImage(); 
    BufferedImage resizedImage = new BufferedImage(Size, Size, BufferedImage.TYPE_INT_ARGB); 
    Graphics2D g2 = resizedImage.createGraphics(); 
    g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); 
    g2.drawImage(img, 0, 0, Size, Size, null); 
    g2.dispose(); 
    return new ImageIcon(resizedImage); 
} 
} 
+2

1)爲了更好地幫助越早,張貼[MCVE](http://stackoverflow.com/help/mcve)(最小完備可驗證實施例)或[SSCCE](http://www.sscce.org/) (簡短,獨立,正確的例子)。 2)獲取圖像的一種方法是通過[本問答](http://stackoverflow.com/q/19209650/418556)中的圖像進行熱鏈接。 3)請參閱[我是否應避免使用Java Swing中的set(Preferred | Maximum | Minimum)Size方法?](http://stackoverflow.com/q/7229226/418556)(是) – 2014-12-03 10:55:16

+5

.. 4)請學習常見的Java命名法(命名約定 - 例如'EachWordUpperCaseClass','firstWordLowerCaseMethod()','firstWordLowerCaseAttribute',除非它是'CONSTANT')並且一致地使用它。 – 2014-12-03 10:56:12

+0

添加了github源代碼鏈接,並更新了您所說的變量/方法名稱。仍在尋求答案 – 2014-12-03 22:03:38

回答

0

我這方面的工作,事實證明,我有我的面板設置不對,他們設置是這樣的:

的JFrame

--mainPanel

----滾動面板

而我將我的擴展面板到滾動

這似乎不工作,所以我增加了一個面板內的scrollPane並開始將我的擴展面板添加到這個新面板,並開始工作!