我对Swing和GUI编程一般都比较新,所以我可能在这里犯了一些非常简单的错误,但是:
我有一个名为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 :(得分:3)
不要扩展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 );