Java 设置Swing的大小问题

Java 设置Swing的大小问题,java,swing,Java,Swing,我正在尝试使用Swing创建一个非常简单的GUI面板 这是我的密码: JPanel bigBlindSelectionPanel = new JPanel(); bigBlindSelectionPanel.setLayout(new BorderLayout()); bigBlindSelectionPanel.setBorder(BorderFactory.createLineBorder(Color.black)); JList bigBlindList

我正在尝试使用Swing创建一个非常简单的GUI面板

这是我的密码:

    JPanel bigBlindSelectionPanel = new JPanel();
    bigBlindSelectionPanel.setLayout(new BorderLayout());
    bigBlindSelectionPanel.setBorder(BorderFactory.createLineBorder(Color.black));

    JList bigBlindList = new JList<String>(model);

    // Code to fill the list

    JLabel bigBlindAddLabel = new JLabel("Add big blind numbers to queries");
    bigBlindAddLabel.setBorder(new EmptyBorder(20, 20, 20, 20));

    JScrollPane bigBlindScrollPanel = new JScrollPane(bigBlindList);
    //bigBlindScrollPanel.setSize(0, 80);
    bigBlindScrollPanel.setBorder(new EmptyBorder(20, 20, 20, 20));

    JButton bigBlindAddButton = new JButton("Add");
    bigBlindAddButton.addActionListener(this);
    //bigBlindAddButton.setSize(0, 20);
    bigBlindAddButton.setBorder(new EmptyBorder(20, 20, 20, 20));

    bigBlindSelectionPanel.add(bigBlindAddLabel, BorderLayout.NORTH);
    bigBlindSelectionPanel.add(bigBlindScrollPanel, BorderLayout.CENTER);
    bigBlindSelectionPanel.add(bigBlindAddButton, BorderLayout.SOUTH);

    frame.pack();
    frame.setSize(300, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setContentPane(bigBlindSelectionPanel);
    frame.setVisible(true);
JPanel bigbindselectionpanel=newjpanel();
bigBlindSelectionPanel.setLayout(新的BorderLayout());
bigBlindSelectionPanel.setBorder(BorderFactory.createLineBorder(Color.black));
JList bigBlindList=新JList(型号);
//代码来填充列表
JLabel bigbindaddlabel=新的JLabel(“向查询添加大盲数”);
setboorder(新的EmptyBorder(20,20,20,20));
JScrollPane bigBlindScrollPanel=新的JScrollPane(bigBlindList);
//bigBlindScrollPanel.setSize(0,80);
setboorder(新的EmptyBorder(20,20,20,20));
JButton bigBlindAddButton=新JButton(“添加”);
bigBlindAddButton.addActionListener(此);
//bigBlindAddButton.setSize(0,20);
setboorder(新的EmptyBorder(20,20,20,20));
bigBlindSelectionPanel.add(bigBlindAddLabel,BorderLayout.NORTH);
bigBlindSelectionPanel.add(bigBlindScrollPanel,BorderLayout.CENTER);
bigBlindSelectionPanel.add(bigBlindAddButton,BorderLayout.SOUTH);
frame.pack();
框架。设置尺寸(300300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(bigBlindSelectionPanel);
frame.setVisible(true);

这就是结果

我有以下问题:

  • 如何更改按钮和滚动面板的大小?设置大小操作(在上面的代码中注释)没有产生任何结果

  • 如何显示帧而不通过setSize()调用为其指定大小?如果我没有使用高度和宽度调用setSize方法,则不会显示任何内容。我这样问是因为我读到,如果可能的话,我不应该使用尺码


  • 提前感谢您的帮助

    可以使用以下方法控制JList的大小:

    list.setVisibleRowCount(...);
    
    然后,滚动条将根据模型中的数据根据需要显示或消失

    按钮填充框架的宽度,因为这是BorderLayout的规则。如果您不希望按钮填充宽度,那么可以将其包装在JPanel中。默认情况下,JPanel使用FlowLayout,该FlowLayout重复添加到它的任何组件的大小:

    JPanel wrapper = new JPanel();
    wrapper.add(button);
    frame.add(wrapper, BorderLayout.PAGE_END);
    
    如何在不指定尺寸的情况下显示框架

    您不需要setSize()方法。
    pack()
    方法将以首选尺寸显示组件

    此外,不需要为所有组件指定边框。创建边界布局时,可以在构件之间创建间隙:

    bigBlindSelectionPanel.setLayout(new BorderLayout(20, 20));
    

    然后,您只需在面板的右/左边缘添加边框即可。

    可以使用以下方法控制JList的大小:

    list.setVisibleRowCount(...);
    
    然后,滚动条将根据模型中的数据根据需要显示或消失

    按钮填充框架的宽度,因为这是BorderLayout的规则。如果您不希望按钮填充宽度,那么可以将其包装在JPanel中。默认情况下,JPanel使用FlowLayout,该FlowLayout重复添加到它的任何组件的大小:

    JPanel wrapper = new JPanel();
    wrapper.add(button);
    frame.add(wrapper, BorderLayout.PAGE_END);
    
    如何在不指定尺寸的情况下显示框架

    您不需要setSize()方法。
    pack()
    方法将以首选尺寸显示组件

    此外,不需要为所有组件指定边框。创建边界布局时,可以在构件之间创建间隙:

    bigBlindSelectionPanel.setLayout(new BorderLayout(20, 20));
    

    然后,您可以在面板的右/左边缘添加边框。

    非常感谢您的详细回答!在列表的可见行中,用JPanel包装的按钮工作得非常好。但是,如果删除setSize()方法,框架将显示一个空面板(仅显示标题栏)。我做错什么了吗?@BenoitGoderre,在将组件添加到框架后,您需要执行
    pack()
    ,否则pack()将在空框架上执行。因此,pack()应该在
    设置可见(true)
    之前完成。非常感谢您的详细回答!在列表的可见行中,用JPanel包装的按钮工作得非常好。但是,如果删除setSize()方法,框架将显示一个空面板(仅显示标题栏)。我做错什么了吗?@BenoitGoderre,在将组件添加到框架后,您需要执行
    pack()
    ,否则pack()将在空框架上执行。因此,pack()应该在
    设置可见(true)
    之前完成。