Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 固定GridBagLayout中JTextPane的宽度_Java_Swing_Layout_Jtextpane_Gridbaglayout - Fatal编程技术网

Java 固定GridBagLayout中JTextPane的宽度

Java 固定GridBagLayout中JTextPane的宽度,java,swing,layout,jtextpane,gridbaglayout,Java,Swing,Layout,Jtextpane,Gridbaglayout,我有一个小组: public class MyPanel extends JPanel { public MyPanel() { super(); this.setLayout(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); JTable leftTable = new JTable(); gbc.fill

我有一个小组:

public class MyPanel extends JPanel {

    public MyPanel() {
        super();
        this.setLayout(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();

        JTable leftTable = new JTable();
        gbc.fill = GridBagConstraints.BOTH;
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.weightx = 0.1;
        gbc.weighty = 1.0;
        add(leftTable, gbc);

        JTextPane textPane = new JTextPane();
        gbc.fill = GridBagConstraints.BOTH;
        gbc.gridx = 1;
        gbc.gridy = 0;
        gbc.weightx = 0.4;
        gbc.weighty = 1.0;
        add(textPane, gbc);

        JTable rightTable = new JTable();
        gbc.fill = GridBagConstraints.BOTH;
        gbc.gridx = 2;
        gbc.gridy = 0;
        gbc.weightx = 0.5;
        gbc.weighty = 1.0;
        add(rightTable, gbc);
    }
}
然后,当我在JTextPane中输入一些字符时,它会自动调整大小。在文本窗格的同一行上有200个字符,因此2个JTables不再可见

如何确定JTextPane的宽度

谢谢。

只需使用gbc.fill=GridBagConstraints.NONE;对于JTextPane,只需使用gbc.fill=GridBagConstraints.NONE;对于JTextPane,我最后使用了from

在我测试过的所有情况下,调整大小、空/满组件等都更容易预测

注意,您必须显式调用getTableHeader,因为JTables不直接在JScrollPane中

谢谢。

最后我用了一个from

在我测试过的所有情况下,调整大小、空/满组件等都更容易预测

注意,您必须显式调用getTableHeader,因为JTables不直接在JScrollPane中


谢谢。

@StanislavL做到了:gbc.fill=gridbagsconstraints.VERTICAL;gbc.weightx=0.0;但当我输入时,我的JTextPane仍然调整了大小。我仍然不知道如何确定它的宽度。@MarcdeVerdelhan:那么做一件事,将您的JTextPane添加到JScrollPane中,并将这个JScrollPane与JTable.Erf放在一起。我不能那样做。MyPanel已在JScrollPane组件中。我希望这3个组件—2个jtables和jscrollpane—能够同步,这样我就不能在JTextPane中使用独立的组件了。请您提供一些代码片段,以说明您计划如何进行?这可能会有所帮助。如果您不使用GridBagLayout,而是使用GridBagLayout并将这三个放在JScrollPane中,会怎么样?既然这三个维度都是相同的,那么这难道没有任何帮助吗?@StanislavL这样做了:gbc.fill=GridBagConstraints.VERTICAL;gbc.weightx=0.0;但当我输入时,我的JTextPane仍然调整了大小。我仍然不知道如何确定它的宽度。@MarcdeVerdelhan:那么做一件事,将您的JTextPane添加到JScrollPane中,并将这个JScrollPane与JTable.Erf放在一起。我不能那样做。MyPanel已在JScrollPane组件中。我希望这3个组件—2个jtables和jscrollpane—能够同步,这样我就不能在JTextPane中使用独立的组件了。请您提供一些代码片段,以说明您计划如何进行?这可能会有所帮助。如果您不使用GridBagLayout,而是使用GridBagLayout并将这三个放在JScrollPane中,会怎么样?既然这三个物体的尺寸都相同,这难道没有任何帮助吗?GBL中的重量只用于剩余空间。除非重写该行为,否则JTextPane将要求有足够的空间来显示其中的所有文本,因此只有在显示所有文本后,才会考虑权重。如果JTables也有内容,那么布局的行为是否得体?您希望布局的行为如何?您可以在JTextPane上使用setPreferredSize来“修复”大小,但如果可能,应该避免这样做。GBL中的权重将仅用于剩余空间。除非重写该行为,否则JTextPane将要求有足够的空间来显示其中的所有文本,因此只有在显示所有文本后,才会考虑权重。如果JTables也有内容,那么布局的行为是否得体?您希望布局的行为如何?您可以在JTextPane上使用setPreferredSize来“修复”大小,但如果可能的话,应该避免这样做。很高兴知道您以某种方式将其排序为+1:-很高兴知道您以某种方式将其排序为+1:-
private void initItemsPanel() {
    JPanel itemsPanel = new JPanel();
    itemsPanel.setLayout(new FormLayout("left:pref, fill:400px, pref:grow", "fill:20px, fill:4px, fill:max(20px;pref)"));
    CellConstraints cc = new CellConstraints();

    // the left table
    JTable leftTable = new JTable();
    itemsPanel.add(leftTable.getTableHeader(), cc.xywh(1, 1, 1, 2));
    itemsPanel.add(leftTable, cc.xywh(1, 3, 1, 1));

    // the text pane
    itemsPanel.add(new JTextPane(), cc.xywh(2, 2, 1, 2));

    // the right table
    JTable rightTable = new JTable();
    rightTable.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
    itemsPanel.add(rightTable.getTableHeader(), cc.xywh(3, 1, 1, 2));
    itemsPanel.add(rightTable, cc.xywh(3, 3, 1, 1));

    // Adding the items panel to dialog panel
    JScrollPane itemsScrollPane = new JScrollPane(itemsPanel);
    itemsScrollPane.getVerticalScrollBar().setUnitIncrement(3);

    dialogPanel.add(itemsScrollPane, BorderLayout.CENTER); // with dialogPanel previously instantiated
}