Java Swing:如何使其中可能带有按钮的项目滚动显示?

时间:2018-06-20 23:48:01

标签: java swing jpanel jscrollpane

我正在尝试制作可能带有按钮的项目的可滚动列表。它包含在JTabbedPane中,经过彻底的Google搜索后,我仍然不确定如何继续。

我要实现的目标的图片: quick sketch 想到的最好的事情是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的视口指向它,但是它也不起作用。还应该尝试什么?

任何建议,谢谢。

1 个答案:

答案 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 PanesJavaDocs,它们提供了有关JScrollPane的工作方式的更多信息