我创建了一个简单的Swing应用程序,它当前包含一个JToolBar,一个JTree和一个RSyntaxTextArea,都在GridBagLayout中。
JTree目前只有一个顶级节点,并且只有一个子节点。 使用JToolBar,JTree和RSyntaxTextArea完成UI
当扩展JTree的顶部节点时,整个GridBagLayout类型的"最小化":
我已经搜索了这个现象,但由于控制台中没有错误信息或其他内容,我现在感到很无助。
我使用以下代码创建用户界面:
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;
}
答案 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;约束