扩展JTree的节点可以最小化GridBagLayout

时间:2017-07-25 16:53:10

标签: java swing jtree rsyntaxtextarea

我创建了一个简单的Swing应用程序,它当前包含一个JToolBar,一个JTree和一个RSyntaxTextArea,都在GridBagLayout中。

JTree目前只有一个顶级节点,并且只有一个子节点。 Complete UI with JToolBar, JTree and RSyntaxTextArea 使用JToolBar,JTree和RSyntaxTextArea完成UI

当扩展JTree的顶部节点时,整个GridBagLayout类型的"最小化": The UI after expanding the top node of the JTree.

我已经搜索了这个现象,但由于控制台中没有错误信息或其他内容,我现在感到很无助。

我使用以下代码创建用户界面:

     PiteloDataContext contexto = new PiteloDataContext();
        var resultados = from analisis in contexto.Analises
                         select analisis;

        if (Hospitales != null)
        {
            List<string> listaHospitales = new List<string>();
            listaHospitales = Hospitales.ToString().Split(';').ToList();
            resultados = resultados.Where(b => listaHospitales.Contains(b.Incidente.Hospital.Denominacion));               

        }

NumAnalisisASPxLabel.Text = resultados.Count().ToString();

        foreach (Pitelo.EntityClasses.Analisis anal in resultados )
        {
            **numMedidas = numMedidas + anal.Medidas.Count();**
            if ((anal.FechaHora != null) && (anal.Incidente.FechaHora != null))
            {
                sumaSegundosEntreComunicacionAnalisis = sumaSegundosEntreComunicacionAnalisis + (Convert.ToDateTime(anal.FechaHora) - Convert.ToDateTime(anal.Incidente.FechaHora));
                numElementosTomarEnCuenta++;
            }
            if ((anal.FechaHora != null) && (anal.Incidente.FechaHoraCierre!=null))
            {
                sumaSegundosEntreComunicacionAnalisisCierre = sumaSegundosEntreComunicacionAnalisisCierre + (Convert.ToDateTime(anal.Incidente.FechaHoraCierre) - Convert.ToDateTime(anal.FechaHora));
                numElementosTomarEnCuenta2++;
            }
        }

更新 :在系统上进行编译以进行测试的最小代码示例:

RSyntaxTextArea textArea = new RSyntaxTextArea(50, 150);
textArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA);
textArea.setCodeFoldingEnabled(true);
RTextScrollPane sp = new RTextScrollPane(textArea);

cp.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;

c.gridx = 0;
c.gridy = 0;
cp.add(createToolbar(), c);

c.gridx = 0;
c.gridy = 1;
c.ipadx = 90;
c.fill = GridBagConstraints.BOTH;
cp.add(createTree(), c);

c.gridx = 1;
c.gridy = 1;
c.fill = GridBagConstraints.HORIZONTAL;
cp.add(sp, c);

...

private JToolBar createToolbar() {
    JToolBar tb = new JToolBar("Toolbar", JToolBar.HORIZONTAL);

    JButton ob = new JButton(new ImageIcon("..."));

    tb.add(ob);

    tb.setFloatable(false);
    tb.setRollover(true);

    return tb;
}

...

private JTree createTree() {
    DefaultMutableTreeNode top = new DefaultMutableTreeNode("Projects");
    JTree tree = new JTree(top);

    DefaultMutableTreeNode test = new DefaultMutableTreeNode("I'm a test!");
    top.add(test);

    return tree;
}

1 个答案:

答案 0 :(得分:2)

  
    

扩展JTree的顶级节点时,整个GridBagLayout类型的&#34;最小化&#34;:

  

当没有足够的空间显示整个组件时,GridBagLayout将缩小到组件的最小大小。

  

Swing应用程序,当前包含一个JToolBar,一个JTree和一个RSyntaxTextArea,都在GridBagLayout中。

我只想使用框架的默认BorderLayout

add(toolbar, BorderLayout.PAGE_START);
add(treeScrollPane, BorderLayout.CENTER);
add(textAreaScrollPane, BorderLayout.PAGE_END);

注意我是如何将JTree添加到JScrollPane的。现在,当需要时,将为树显示滚动条。

如果您确实想使用GridBagLayout,请阅读How to Use GridBagLayout上Swing教程中的部分,以获取有关如何使用各种约束的说明。你可能想要开始使用&#34; weightx / y&#34;随着帧大小的改变,控制哪些组件获得空间的约束。另外,看看&#34; fill&#34;约束