我正在尝试制作可能带有按钮的项目的可滚动列表。它包含在JTabbedPane中,经过彻底的Google搜索后,我仍然不确定如何继续。
我要实现的目标的图片: 想到的最好的事情是JScrollPane,它的项目作为具有BoxLayout的JPanels,并且它们具有“项目名称|按钮|按钮”,尽管我可能完全错了,而且JScrollPane无法接受多个组件。
我需要帮助的是将这些JPanels添加到JScrollPane。怎么做?我尝试了简单的“ this.add(面板名称)”,它不起作用。
// MainWindow:
JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.addTab("Overview", new OverviewTab());
tabbedPane.addTab("Warehouse", new WarehouseTab());
tabbedPane.addTab("History", new HistoryTab());
public class WarehouseTab extends JScrollPane {
WarehouseTab(){
this.setBorder(null);
this.add(new WarehouseItem());
this.add(new WarehouseItem());
this.add(new WarehouseItem());
this.setVisible(true);
}
public class WarehouseItem extends JPanel {
WarehouseItem(){
this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
JButton sell = new JButton("Sell");
JButton tax = new JButton("Return tax");
JLabel name = new JLabel("Item name");
this.add(name);
this.add(tax);
this.add(sell);
}
我还尝试将我的JPanels打包到Container中,然后按照其他一些论坛上的建议将JScrollPane的视口指向它,但是它也不起作用。还应该尝试什么?
任何建议,谢谢。
答案 0 :(得分:1)
尽管我可能是完全错误的,并且JScrollPane无法接受多个组件。
是的,没错,JScrollPane
管理一个“视图”。您应该这样做:首先使用一个单独的JPanel
作为其他元素的“主要”容器,然后将其包装在JScrollPane
public class WarehouseTab extends JPanel {
public WarehouseTab() {
setLayout(new BorderLayout());
add(new JScrollPane(new WarehousePane());
}
}
public class WarehousePane extends JPanel {
WarehousePane(){
setLayout(...); // Set an appropriate layout for overall needs
this.add(new WarehouseItem());
this.add(new WarehouseItem());
this.add(new WarehouseItem());
}
另外,请查看How to Use Scroll Panes和JavaDocs,它们提供了有关JScrollPane
的工作方式的更多信息