Java 要动态更改gridbag布局中的插入吗

Java 要动态更改gridbag布局中的插入吗,java,swing,Java,Swing,我有一个gridbag布局,其中我初始化了一个gbc.insets=insets(0,0,0,); 稍后,当发生某些操作时,我想调整此插图的大小。 我尝试更改值,然后重新绘制(),但这不起作用? 我需要做什么?多谢各位 class myGraph { private Insets myInsets = new Insets(0,0,0,0); ... gbc.insets = myInsets; // setting Gridbag constraints.

我有一个gridbag布局,其中我初始化了一个gbc.insets=insets(0,0,0,); 稍后,当发生某些操作时,我想调整此插图的大小。 我尝试更改值,然后重新绘制(),但这不起作用? 我需要做什么?多谢各位

class myGraph {

    private Insets myInsets = new Insets(0,0,0,0);

    ...
    gbc.insets = myInsets; // setting Gridbag constraints.



    Action Listener {

        ............... 
        myInsets.top =30;
        myInsets.bottom =40;
        myGraph.repaint();
    }
}

您需要更新GridBagLayout:

GridBagLayout layout = new GridBagLayout();
JPanel panel = new JPanel(layout);
...
layout.setConstraints(myComponent, anotherConstraint);
// do this for all the components you want to update
panel.revalidate();
panel.repaint();
GridBagLayout会在添加组件时克隆约束,因此需要告诉LayoutManager要更改这些约束。简单地修改consraints值绝对没有效果


顺便说一句,repaint()只是执行“绘制”操作,而不是布局。改用revalidate()。

您需要更新GridBagLayout:

GridBagLayout layout = new GridBagLayout();
JPanel panel = new JPanel(layout);
...
layout.setConstraints(myComponent, anotherConstraint);
// do this for all the components you want to update
panel.revalidate();
panel.repaint();
GridBagLayout会在添加组件时克隆约束,因此需要告诉LayoutManager要更改这些约束。简单地修改consraints值绝对没有效果


顺便说一句,repaint()只是执行“绘制”操作,而不是布局。改为使用重新验证()。

“我需要做什么?”第一步,修复粘性“?”键。要获得更好的帮助,请尽快用“我需要做什么”键编辑您的问题。第一步,修复粘性“?”键。要获得更好的帮助,请不要确定是否需要GBC面板。重新绘制();,为什么要保存重要的代码行:-)@mKorbel对不起,你把我弄丢了。我不明白你在说什么(尽管我很肯定你是对的;)-)。我在中使用了相同的技术,效果非常好。简单而简短的回答,(请)永远不要在不重新绘制的情况下使用重新验证,因为测试代码并不重要…@mKorbel我认为没有它也可以工作。在重新验证()之后始终调用repaint()是否真的被认为是一种“良好实践”?不这样做是否被视为“邪恶行为”?这只是为了扩展我的知识。如果我只想改变一个约束条件,我可以这样做吗?或者我必须重新做我以前做过的所有其他解释。这似乎需要很多代码。我看到了这个例子,似乎应该有一个简单的方法来更新一个约束。请不要确定GBC是否需要panel.repaint();,为什么要保存重要的代码行:-)@mKorbel对不起,你把我弄丢了。我不明白你在说什么(尽管我很肯定你是对的;)-)。我在中使用了相同的技术,效果非常好。简单而简短的回答,(请)永远不要在不重新绘制的情况下使用重新验证,因为测试代码并不重要…@mKorbel我认为没有它也可以工作。在重新验证()之后始终调用repaint()是否真的被认为是一种“良好实践”?不这样做是否被视为“邪恶行为”?这只是为了扩展我的知识。如果我只想改变一个约束条件,我可以这样做吗?或者我必须重新做我以前做过的所有其他解释。这似乎需要很多代码。我看到了这个例子,似乎应该有一个简单的方法来更新一个约束。