Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将任何其他布局管理器用于jscrollpane,而不是使用空布局 我使用空布局创建了此视图:_Java_Swing_Layout Manager - Fatal编程技术网

Java 如何将任何其他布局管理器用于jscrollpane,而不是使用空布局 我使用空布局创建了此视图:

Java 如何将任何其他布局管理器用于jscrollpane,而不是使用空布局 我使用空布局创建了此视图:,java,swing,layout-manager,Java,Swing,Layout Manager,这是我用来创建上述布局的代码 公共类页面1311扩展了JPanel{ //专用JTable表; //public JScrollPane=null; 公共JPanel面板=空; 公共JButton back=null; /** *创建面板。 */ 公共页1311(){ setLayout(空); 后退=新的按钮(“后退”); back.setFont(新字体(“Arial”,Font.PLAIN,20)); 后退.后退(10,10,150,27); 加(回); 列表=新的ArrayList();

这是我用来创建上述布局的代码
公共类页面1311扩展了JPanel{
//专用JTable表;
//public JScrollPane=null;
公共JPanel面板=空;
公共JButton back=null;
/**
*创建面板。
*/
公共页1311(){
setLayout(空);
后退=新的按钮(“后退”);
back.setFont(新字体(“Arial”,Font.PLAIN,20));
后退.后退(10,10,150,27);
加(回);
列表=新的ArrayList();

对于(int j=0;j
JScrollPane
有自己的布局:
ScrollPaneLayout
。如果您想使用任何其他布局,您不需要在滚动窗格本身上设置它,您可以在其中放置一个
JPanel
,然后在该面板上设置布局。

如果您的布局使用空布局管理器,您需要告诉滚动窗格您的组件的大小新台币

    JPanel pane = new JPanel(){
        Dimension d = new Dimension(400, 400);

        @Override
        public Dimension getMinimumSize(){
            return d;
        }
        @Override
        public Dimension getPreferredSize(){
            return d;
        }
        @Override
        public Dimension getMaximumSize(){
            return d;
        }

        @Override
        public void paintComponent(Graphics g){
            g.setColor(Color.RED);
            g.fill3DRect(25, 25, 350, 350, true);
        }
    };
    pane.setLayout(null);

    JFrame frame = new JFrame("check");
    frame.setSize(200, 200);
    frame.add(new JScrollPane(pane));
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
为此,我将窗格的大小设置为400400。滚动窗格将尊重这一点。如果您注释掉覆盖的方法,您将看到滚动不再工作

为了让OP应用这种技术,他们只需更改将面板添加到JFrame的行

frame.add(new JScrollPane(new Page1311()));

由于
Page1311
不使用布局管理器,因此它们需要覆盖getMin/Max/Preferred。正如我在示例中所做的那样。这将使用滚动窗格包装自定义JPanel,并且内容将可滚动。

另一种不需要为JScrollPane设置任何布局管理器的方法是

JScrollPane.setViewportView(Component);
这是我喜欢的方式。没有大小或布局处理的飞行


如果你想在同一个
JScrollPane
中放置几个组件,只需在它们之间放置一个
JPanel
JPanel
可以有你喜欢的布局。

我会对每个“展示室”面板使用一个
GridBagLayout
组合,然后使用一个列
GridBagLayout
面板来堆叠sho的集合w房间面板在一个容器中。第二个面板位于滚动窗格中

import java.awt.*;
导入javax.swing.*;
导入javax.swing.border.*;
公共类展厅布局{
私有JComponent ui=null;
展厅布局(){
initUI();
}
私有JPanel getShowRoomPanel(int num){
JPanel p=newjpanel(newgridbaglayout());
p、 setBorder(新标题边框(“GridBagLayout”);
GridBagConstraints gbc=新的GridBagConstraints();
gbc.插图=新插图(5,5,5,5);
gbc.anchor=GridBagConstraints.WEST;
p、 添加(新JLabel(“名称:本田展厅”+num),gbc);
gbc.gridx=1;
p、 新增(新捷拉贝尔(“城市:曼德索尔”),gbc;
gbc.gridx=2;
p、 新增(新杰拉贝尔(“地址:查克拉瓦蒂殖民地火车站路25号”),gbc;
gbc.gridy=1;
gbc.gridx=0;
p、 添加(新JLabel(“车辆名称:Activa”)、gbc;
gbc.gridx=1;
p、 添加(新JLabel(“车辆版本:2017”),gbc;
gbc.gridx=2;
p、 添加(新JLabel(“车辆公司:本田”)、gbc;
gbc.gridy=2;
gbc.gridx=0;
p、 添加(新按钮(“Go”),gbc;
返回p;
}
public void initUI(){
如果(ui!=null){
返回;
}
ui=新的JPanel(新的BorderLayout(4,4));
ui.setboorder(新的空订单(4,4,4,4));
JPanel pList=新的JPanel(新的网格布局(0,1,3,3));
pList.setboorder(新标题边框(“网格布局”);
对于(int ii=1;ii<21;ii++){
pList.add(getShowRoomPanel(ii));
}
JScrollPane scrollPane=新的JScrollPane(pList,
JScrollPane.VERTICAL\u滚动条\u始终,
JScrollPane.HORIZONTAL\u SCROLLBAR\u NEVER);
添加(滚动窗格);
}
公共JComponent getUI(){
返回用户界面;
}
公共静态void main(字符串[]args){
Runnable r=新的Runnable(){
@凌驾
公开募捐{
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}捕获(异常使用默认值){
}
展厅布局o=新展厅布局();
JFrame f=新的JFrame(o.getClass().getSimpleName());
f、 setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f、 setLocationByPlatform(真);
f、 setContentPane(o.getUI());
f、 包装();
维度d=f.getSize();
f、 设置尺寸(新尺寸(d.width,400));
f、 setMinimumSize(f.getSize());
f、 setVisible(真);
}
};
SwingUtilities.invokeLater(r);
}
}

为什么不能使用滚动窗格?出了什么问题?如果让我猜,我会说您需要覆盖
维度getPreferredSize()
维度getMinimumSize()
维度getMaximumSize())
您是否尝试了我提供的示例,其中我使用了一个
null
布局管理器,并且窗格可以滚动?谁会对此进行否决?OP有一个自定义组件,它们可以完全布局。我给出了一个示例。如果他们使用此技术,他们甚至不必修改代码。
JScrollPane.setViewportView(Component);
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;

public class ShowRoomLayout {

    private JComponent ui = null;

    ShowRoomLayout() {
        initUI();
    }

    private JPanel getShowRoomPanel(int num) {
        JPanel p = new JPanel(new GridBagLayout());
        p.setBorder(new TitledBorder("GridBagLayout"));

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.insets = new Insets(5, 5, 5, 5);
        gbc.anchor = GridBagConstraints.WEST;

        p.add(new JLabel("Name:Honda Showroom" + num), gbc);

        gbc.gridx = 1;
        p.add(new JLabel("City:Mandsaur"), gbc);

        gbc.gridx = 2;
        p.add(new JLabel("Address:25 Chakrawati Colony Railway Station Road"), gbc);

        gbc.gridy = 1;
        gbc.gridx = 0;
        p.add(new JLabel("Vehicle Name:Activa"), gbc);

        gbc.gridx = 1;
        p.add(new JLabel("Vehicle Version:2017"), gbc);

        gbc.gridx = 2;
        p.add(new JLabel("Vehicle Companies:Honda"), gbc);

        gbc.gridy = 2;
        gbc.gridx = 0;
        p.add(new JButton("Go"), gbc);

        return p;
    }

    public void initUI() {
        if (ui != null) {
            return;
        }

        ui = new JPanel(new BorderLayout(4, 4));
        ui.setBorder(new EmptyBorder(4, 4, 4, 4));

        JPanel pList = new JPanel(new GridLayout(0, 1, 3, 3));
        pList.setBorder(new TitledBorder("GridLayout"));

        for (int ii = 1; ii < 21; ii++) {
            pList.add(getShowRoomPanel(ii));
        }

        JScrollPane scrollPane = new JScrollPane(pList,
                JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

        ui.add(scrollPane);
    }

    public JComponent getUI() {
        return ui;
    }

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (Exception useDefault) {
                }
                ShowRoomLayout o = new ShowRoomLayout();

                JFrame f = new JFrame(o.getClass().getSimpleName());
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f.setLocationByPlatform(true);

                f.setContentPane(o.getUI());
                f.pack();
                Dimension d = f.getSize();
                f.setSize(new Dimension(d.width, 400));
                f.setMinimumSize(f.getSize());

                f.setVisible(true);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}