2013-11-24 44 views
0

我还是比较新的Swing和GUI编程一般,所以我可能做一些非常简单的错误在这里,但:显示类延伸JScrollPane的

我有一个叫TilePanel类延伸JScrollPane。这门课的目的是包含我的另一个自定义类,TileMap,它本身扩展了JPanel。我遇到的问题是TilePanel从不显示。

这对我来说显得非常奇怪,因为在创建TilePanel类之前,我运行了一个测试,在其中使用了正常的JScrollPane,并将TileMap添加到它。这通常显示给我,并且我能够成功滚动我的TileMap。我的TilePanel类中的代码对JScrollPane没有什么太大的改变,所以我没有看到为什么这个功能不起作用。

下面是TilePanel类的代码:

import javax.swing.JScrollPane; 

public class TilePanel extends JScrollPane 
{ 
    TileMap map; 

    public TilePanel(int rows, int cols) 
    { 
     super(VERTICAL_SCROLLBAR_NEVER, HORIZONTAL_SCROLLBAR_NEVER); 

     map = new TileMap(rows, cols, 9, 9); 
     map.addBorder(Tile.EMPTY, 9); 
     this.add(map); 
    } 
} 

TileMap使用其默认布局GridLayout,如果影响任何东西。

从我的搜索这里和其他地方,我没有发现任何人有类似的问题,除非我只是非常糟糕的搜索。我发现有几个人在向JScrollPane本身添加内容时遇到了问题,但没有人遇到问题,显示的是扩展JScrollPane的类。

如果需要更多信息,我很乐意补充。

+0

我想我找到了答案,我的问题。我显然不能使用.add(JComponent组件),因为它覆盖了视口。我必须使用setViewportView(Jcomponent组件)。 – Aargonian

+0

这就是我在回答中提出的建议。不要创建TilePanel类并使用我建议的代码。 – camickr

回答

2

不扩展JScrollPane,您不会向滚动窗格添加任何新功能。只需创建TileMap类并将其设置为scrollPane的视口。

在你创建你的代码看起来应该像TilePanel类的类:

//TilePanel panel= new TilePanel(); // not needed. 
TileMap map = new TileMap(rows, cols, 9, 9); 
map.addBorder(Tile.EMPTY, 9); 
JScrollPane scrollPane = new JScrollPane(map); 
frame.add(scrollPane); 
+0

它不会向JScrollPane添加任何内容,但它会。不过,这是我在开始添加额外功能之前想解决的一个问题。 – Aargonian

+0

@Aargonian,你没有向scrollpane添加功能。您正在将组件添加到滚动窗格的视口。没有必要创建一个TilePanel类。 – camickr

+0

你说得对,我这样做很愚蠢。我不确定我在想什么。 – Aargonian