java - 具有固定大小的 JScrollPane 中的 JTree
问题描述
我在JPanel 内的JScrollPane 中有一个JTree。
我遇到的问题是当我用节点或长名称的节点填充 JTree 时宽度不固定。
这里有一个例子:
如您所见,左边的比右边的长。
我的目标是使它们的大小完全相等,将主窗口分别拆分为 50%。
这里是用于生成窗口的代码。
有没有办法保持 JScrollPane 的宽度大小固定?谢谢。
public void initialize() {
this.frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
JMenuBar menuBar = new JMenuBar();
frame.setJMenuBar(menuBar);
JMenu mnNewMenu = new JMenu("Services");
mnNewMenu.setHorizontalAlignment(SwingConstants.CENTER);
menuBar.add(mnNewMenu);
frame.getContentPane().setLayout(new MigLayout("", "[grow][grow]", "[grow][grow]"));
JPanel left_JPanel = new JPanel();
frame.getContentPane().add(left_JPanel, "cell 0 0,grow");
left_JPanel.setLayout(new MigLayout("", "[grow]", "[grow]"));
left_ScrollPane = new JScrollPane();
left_JPanel.add(left_ScrollPane, "cell 0 0,grow");
JLabel left_Label = new JLabel("Left Scroll Pane");
left_Label.setFont(new Font("Tahoma", Font.BOLD, 12));
left_Label.setForeground(Color.BLUE);
left_Label.setHorizontalAlignment(SwingConstants.CENTER);
left_ScrollPane.setColumnHeaderView(left_Label);
JTree left_tree = new JTree();
left_ScrollPane.setViewportView(left_tree);
JPanel right_JPanel = new JPanel();
frame.getContentPane().add(right_JPanel, "cell 1 0,grow");
right_JPanel.setLayout(new MigLayout("", "[grow]", "[grow]"));
JScrollPane right_ScrollPane = new JScrollPane();
right_JPanel.add(right_ScrollPane, "cell 0 0,grow");
right_JTree = new JTree(phModel);
right_JTree.setVisibleRowCount(8);
right_ScrollPane.setViewportView(right_JTree);
JLabel right_Label = new JLabel("Right Scroll Pane");
right_Label.setFont(new Font("Tahoma", Font.BOLD, 12));
right_Label.setForeground(Color.BLUE);
right_Label.setHorizontalAlignment(SwingConstants.CENTER);
right_ScrollPane.setColumnHeaderView(right_Label);
}
解决方案
我的目标是使它们的大小完全相等,将主窗口分别拆分为 50%。
使用来自 JDK 的标准布局管理器的嵌套面板。
使GridLayout
组件大小相同。
就像是:
JPanel left = new JPanel( new BorderLayout() );
left.add(leftLabel, BorderLayout.PAGE_START);
left.add(listScrollPane, BorderLayout.CENTER);
JPanel right = ...
JPanel main = new JPanel( new GridLayout(0, 2) );
main.add( left );
main.add( right );
frame.add( main );
推荐阅读
- javascript - function ==>function_name(a) vs function_name(a)(params) 有什么区别
- typescript - 添加新行后,Ag 网格未刷新。我正在使用角度 9
- php - 根据日期codeigniter计算访问总数
- autodesk-forge - 如何在 Autodesk forge 的 Model Derivative API 中找到 AutoCAD 文件的“闭包”数量?
- azure - 是否可以通过 Azure rest api 或 azure cli 在 Azure Api Management 中添加自定义域
- reactjs - 在本地环境中调试 React 生产构建代码的技巧
- python - 如何在python中正则表达式版本号?
- scalardb - ScalarDb 如何支持分页
- reactjs - 离开主页时,React-router V-5.2.0 无法正常工作
- android - 如果Expo React Native App中的文本长度超过2行,如何显示阅读更多按钮