【问题标题】:Cannot setSize JTextPane/JScrollPane无法设置大小 JTextPane/JScrollPane
【发布时间】:2014-08-18 13:39:40
【问题描述】:

我有一个带 BorderLayout 的 JFrame,我在 NORTH 有一个 JTextPane/JScrollPane,在 CENTER 有一个 splitpane,在 SOUTH 有一个带有 4 个 JButtons 的 JPanel。我的框架尺寸是 (500, 470)。我希望 JTextPane 填充大部分窗口,所以我将其 preferredSize 设置为 (500, 450) 但它没有效果。

这是关于发生了什么的图片:http://postimg.org/image/3wslmppx7/

这是我的代码:

public void initGUI()
{
    configWindow = new JFrame();
    configWindow.setTitle(node.getDispName()+ " [" + node.getIp() + "] configuration");
    configWindow.setSize(500, 470);
    configWindow.setLocation(TopologyMain.dim.width/2-configWindow.getSize().width/2, TopologyMain.dim.height/2-configWindow.getSize().height/2);
    configWindow.getContentPane().setLayout(new BorderLayout());

    configPane = new JTextPane();
    configPane.setEditable(true);
    configPane.setName("Config");
    configPane.setPreferredSize(new Dimension(500, 450));
    configPane.setBackground(Color.black);
    configPane.setCursor(new Cursor(Cursor.TEXT_CURSOR));

    scrollPane = new JScrollPane(configPane);
    scrollPane.setPreferredSize(new Dimension(500, 450));

    configWindow.getContentPane().add(scrollPane, BorderLayout.NORTH); 

    buttonPanel = new JPanel();
    buttonPanel.setLayout(new GridBagLayout());
    //buttonPanel.setPreferredSize(new Dimension(500, 20));
    GBC.insets = new Insets(5,5,5,5);

    read = new JButton("Read");
    GBC.gridx = 0;
    GBC.gridy = 1;
    GBC.fill = GridBagConstraints.HORIZONTAL;
    buttonPanel.add(read, GBC);

    apply = new JButton("Apply");
    GBC.gridx = 1;
    GBC.gridy = 1;
    GBC.fill = GridBagConstraints.HORIZONTAL;
    buttonPanel.add(apply, GBC);

    load = new JButton("Load");
    GBC.gridx = 2;
    GBC.gridy = 1;
    GBC.fill = GridBagConstraints.HORIZONTAL;
    buttonPanel.add(load, GBC);

    save = new JButton("Save");
    save.setEnabled(false);
    GBC.gridx = 3;
    GBC.gridy = 1;
    GBC.fill = GridBagConstraints.HORIZONTAL;
    buttonPanel.add(save, GBC);

    configWindow.getContentPane().add(buttonPanel, BorderLayout.SOUTH);

    splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, scrollPane, buttonPanel);
    splitPane.setEnabled(true);
    configWindow.getContentPane().add(splitPane, BorderLayout.CENTER);

    configWindow.setVisible(true);

    fileChooser = new JFileChooser();
}

【问题讨论】:

  • 你在哪里打电话给pack()
  • 不,我不使用它。
  • 嗯,你可能应该这样做。检查its documentation。请记住,仅在将所有内容添加到窗口后才调用它。
  • 成功了,感谢您的时间和帮助。

标签: java swing jscrollpane layout-manager jtextpane


【解决方案1】:

来自 cmets 中 Gabriel Negut 的解决方案:

使用pack() - 但只有在将所有内容添加到窗口后才调用它。

来自the documentation

公共无效包()

调整此窗口的大小以适合首选 其子组件的大小和布局。得到的宽度和高度 如果任一尺寸为 小于上一次调用指定的最小大小 setMinimumSize 方法。

如果窗口和/或其所有者不是 可显示,在计算之前它们都可以显示 首选尺寸。窗口在其大小被验证后被验证 计算出来的。

【讨论】:

    猜你喜欢
    • 2017-09-08
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 2013-06-25
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多