【问题标题】:How can i add JScrollPane inside a JTabbedPane's Tab如何在 JTabbedPane 的选项卡中添加 JScrollPane
【发布时间】:2017-05-09 13:01:57
【问题描述】:

我想用 JScrollPane 在 JTabbedPane 中包装一个“Tab”。但我找不到办法。这是我目前的代码...

“HomeDelivery.java”

import java.sql.*;
import java.util.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.LineBorder;

class HomeDelivery extends JFrame
{
JTabbedPane menu;
JPanel pizza,pastry,drinks;

public HomeDelivery()
{
    setSize(800,800);
    setVisible(true);
    setLayout(new BorderLayout());

    setDefaultCloseOperation(EXIT_ON_CLOSE);

    menu = new JTabbedPane();

    menu.addTab("Burger",new Burger());

    pizza = new JPanel();
    menu.addTab("Pizza",pizza);

    pastry = new JPanel();
    menu.addTab("Pastry",pastry);

    drinks = new JPanel();
    menu.addTab("Drinks",drinks);

    add(menu);
}

public static void main(String args[])
{
    HomeDelivery h = new HomeDelivery();
}
}

“Burger.java”

import java.sql.*;
import java.util.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.LineBorder;

class Burger extends JPanel
{
JFrame f;
//JPanel s;
JPanel p[];
JLabel image[];
JLabel name[];
JLabel price[];
JButton b[];
JScrollPane scroll;
int row;

public Burger()
{   
    p = new JPanel[40];
    image = new JLabel[40];
    name = new JLabel[40];
    price = new JLabel[40];
    b = new JButton[40];

    for(int i=0;i<40;i++)
    {
        p[i] = new JPanel();
        p[i].setLayout(new BoxLayout(p[i],BoxLayout.LINE_AXIS));
        p[i].add(Box.createRigidArea(new Dimension(100,50)));
        image[i] = new JLabel("Image");
        b[i] = new JButton("ADD");
        name[i] = new JLabel("Burger");
        price[i] = new JLabel("150");

        p[i].add(image[i]);
        p[i].add(name[i]);
        p[i].add(price[i]);
        p[i].add(b[i]);

        add(p[i]);
    }

    scroll = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    scroll.setPreferredSize(new Dimension(100,50));
    add(scroll);
}
}

在“Burger.java”部分的最后,我尝试添加一个 JScrollPane,虽然我知道这不是我这样做的正确方式。如果我没有在“Burger.java”中扩展 JPanel,我可以通过这样做添加一个滚动窗格: "JScrollPane 滚动 = 新 JScrollPane(JPanel,JScrollPane.VERTICAL_SCROLLBAR_​​ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_​​NEVER);"

但是,我现在如何在“Burger.java”中做到这一点?如何在我的“汉堡”“标签”中添加 JScrollPane? ...

【问题讨论】:

    标签: java swing jscrollpane jtabbedpane


    【解决方案1】:

    解决此类问题的第一站是公共 Java API 文档。在那里你会找到另一个JScrollPane的构造函数:

    http://docs.oracle.com/javase/8/docs/api/javax/swing/JScrollPane.html#JScrollPane-java.awt.Component-int-int-

    据此,您的问题可以通过以下方式解决:

    scroll = new JScrollPane(p,  JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    

    【讨论】:

    • 我想将整个 'Tab' 添加到 JScrollPane
    • @Hasan "我想将整个 'Tab' 添加到 JScrollPane" 然后你应该从 Burger 类中删除 JScrollPane 的实例化到HomeDelivery class: `menu.addTab("Burger", new JScrollPane(new Burger(), JScrollPane.VERTICAL_SCROLLBAR_​​ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_​​NEVER));
    • 我之前也尝试过。但是这种方式存在一些“布局”问题...我希望这些面板以这种方式设置在“BoxLayout(面板,PAGE_AXIS)”中。 . 但是面板会像 FlowLayout 一样水平运行...也许我需要更改“HomeDelivery”中的布局??
    • @Hasan 也许你会退后一步,用一个(几乎)空的Burger 类重新开始,只是为了看看 TabLayout 是否有效。
    • 好的...我会试试的。
    【解决方案2】:

    编辑:不要扩展JScrollPane,这里没有必要。

    你可以:

    例如:

    import java.awt.EventQueue;
    import javax.swing.BoxLayout;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTabbedPane;
    import javax.swing.SwingConstants;
    import javax.swing.WindowConstants;
    
    public class TabExample {
    
        public static void main(String[] args) {
            EventQueue.invokeLater(() -> {
                final JFrame frame = new JFrame("Example");
                final JTabbedPane tp = new JTabbedPane();
                final BurgerTab burgerTab = new BurgerTab();
                final JScrollPane scrollPane = new JScrollPane(burgerTab, 
                        JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
                tp.addTab("Burgers", scrollPane);
                frame.getContentPane().add(tp);
                frame.pack();
                frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
                frame.setLocationByPlatform(true);
                frame.setVisible(true);
            });
        }
    
        private static class BurgerTab extends JPanel {
    
            BurgerTab() {
                setLayout(new BoxLayout(this, SwingConstants.VERTICAL));
                final JPanel[] burgers = new JPanel[40];
    
                for(int i = 0; i < burgers.length; i++) {
                    burgers[i] = new JPanel();
                    burgers[i].add(new JLabel("Burger #" + (i + 1)));
                    add(burgers[i]);
                }
            }
    
        }
    
    }
    

    【讨论】:

    • 扩展 Swing 课程应该是最后的手段,这里绝对不需要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多