为了账号安全,请及时绑定邮箱和手机立即绑定

设置 Swing BorderLayout 侧面板的最小宽度

设置 Swing BorderLayout 侧面板的最小宽度

跃然一笑 2023-08-16 10:51:26
我了解 BorderLayout 的某些部分 - 例如,EAST/WEST(或 BEGINNING_OF_LINE/END_OF_LINE)面板组件保持一个宽度,其长度随着窗口的长度而拉伸。我想在西侧放置一个面板,该面板本身具有多个组件 - 在本例中是一个按钮面板和一个按钮控制的 JList。我想为该 JList 中的字符串分配最小宽度,但某些东西(可能是 BorderLayout)阻止我设置最小或首选宽度。当我运行下面的代码时,左侧面板中的列表对于“LongNameGame 3”来说足够宽,但这只是因为我在渲染列表之前添加了字符串。我想设置该 JList 的宽度以容纳我选择的宽度的字符串。稍后我会将其放入 ScrollPane 中,用于比这更宽的字符串,但这是一个不同的问题。我的问题并没有通过向其他布局管理器推荐来得到解答——如果可能的话,我想知道如何使用 BorderLayout 来做到这一点。package comm;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.GridLayout;import java.util.Vector;import javax.swing.BorderFactory;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JList;import javax.swing.JPanel;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.border.Border;public class BLPlay{  public static void main(String ... arguments)  {    JFrame frame = buildLoungeFrame();    frame.setVisible(true);  }  private static JFrame buildLoungeFrame()  {    JFrame loungeFrame = new JFrame("BLPlay");    loungeFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    loungeFrame.setLayout(new BorderLayout(10,10));    // left panel is another BorderLayout panel with buttons and a list of games    JPanel gameListControlPanel = new JPanel(new BorderLayout());    Border innerBorder = BorderFactory.createLineBorder(Color.BLACK, 2);    Border outerBorder = BorderFactory.createEmptyBorder(3,3,3,3);    gameListControlPanel.setBorder(BorderFactory.createCompoundBorder(outerBorder, innerBorder));    String[] gamePanelButtonLabels = { "New", "Join", "Leave", "End" };    JPanel gamePanelButtons = new JPanel(new GridLayout(gamePanelButtonLabels.length,1));    addButtons(gamePanelButtons, gamePanelButtonLabels);    JPanel gamePanelButtonsContainerPanel = new JPanel();    gamePanelButtonsContainerPanel.add(gamePanelButtons);    gameListControlPanel.add(gamePanelButtonsContainerPanel, BorderLayout.WEST);
查看完整描述

1 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

为 JList 提供一个足够宽的原型单元格值以显示您需要的内容。例如,

gameJList.setPrototypeCellValue("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

原型值(此处为 String,因为列表已声明为 a JList<String>)用于设置列表的首选大小,但不会显示在 JList 中。您可以根据需要使用尽可能大或小的列表。另外,请确保在水平维度中出于相同目的设置可见行数:

gameJList.setVisibleRowCount(20);  // for example


查看完整回答
反对 回复 2023-08-16
  • 1 回答
  • 0 关注
  • 79 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信