使用Swing设置大小问题

时间:2015-11-26 18:40:39

标签: java swing

我正在尝试使用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);

enter image description here

结果就是这样。

我有以下问题:

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

  2. 如何在不使用setSize()调用指定大小的情况下显示帧?如果我没有以高度和宽度调用setSize方法,则不显示任何内容。我问,因为我已经读过,如果可能,我不应该使用尺寸。

  3. 提前感谢您的帮助!

1 个答案:

答案 0 :(得分:5)

可以使用以下命令控制JList的大小:

list.setVisibleRowCount(...);

根据模型中的数据,滚动条将根据需要显示或消失。

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

JPanel wrapper = new JPanel();
wrapper.add(button);
frame.add(wrapper, BorderLayout.PAGE_END);
  

如何在不指定大小的情况下显示框架

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

此外,您无需为所有组件指定边框。创建BorderLayout时,可以在组件之间创建间隙:

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

然后你可以在面板上为右/左边添加一个边框。