2014-12-03 88 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并开始将我的扩展面板添加到这个新面板,并开始工作!