首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java Gui,隐藏部分元素后元素之间的间隙

Java Gui,隐藏部分元素后元素之间的间隙
EN

Stack Overflow用户
提问于 2011-05-19 16:46:35
回答 3查看 1.7K关注 0票数 1

我正在使用Netbeans (7.0)在java中开发GUI。

我在这个面板中有一个包含JPanel和几个元素的JFrame。

布局类型我认为是自由布局。

草稿:

代码语言:javascript
运行
复制
-------------------
|JFrame           |
|                 |
| --------------- |
| |JPanel       | |
| |             | |
| | elem1 elem2 | |
| | elem3 elem4 | |
| | elem5 elem6 | |
| |             | |
| |-------------- |
|                 |
-------------------

在我的程序运行期间,我使用setVisible(false)隐藏了一行中的一些元素(例如elem3和elem4)。

除间隙外,所有内容都会按预期调整大小(JFrame和JPanel)。看起来元素被正确地隐藏了,但是仍然有一些间隙,所以在我隐藏elem3和elem4的例子中,行elem1/elem2和elem5/6之间仍然有更大的间隙。

希望我的问题可以理解:-)

有什么方法可以解决这个问题吗?

提前谢谢。

斯特芬

EN

回答 3

Stack Overflow用户

发布于 2011-05-19 16:49:25

尝试从jpanel中删除该元素,而不是隐藏,但请记住,这对于某些布局仍然不起作用。如何处理组件的添加和删除取决于您的布局。

票数 1
EN

Stack Overflow用户

发布于 2011-05-19 17:54:50

为了避免任何误解:

如果TopLayoutContainer一次可见,则:

1/用于添加新的JComponent调用revalidate()和用于复合JComponents f.e.也需要用repaint()调用JComboBox中的set编程项

2/删除JCmponent后,您必须调用revalidate()repaint()

3/例如删除JComponents ->添加新的JComponents -> revalidate()加上repaint()

@Steffen Kuehn有很多可能的问题,最好是发送代码来说明你所描述的问题

票数 1
EN

Stack Overflow用户

发布于 2011-05-20 19:23:40

@Steffen Kuehn请查看下面的代码,它表示您正在经历的“可能”问题。也就是说,您没有重新验证和重新绘制更改过的面板。

请注意,当您使用鼠标左键单击面板时,没有重新绘制/重新验证,并且一开始似乎什么都没有发生。尝试调整框架的大小。它调用这些操作,您将看到元素5和6实际上是可见的。因此,如果您希望更改是即时的,请使用右键单击,这将进行可见性更改和验证。

代码语言:javascript
运行
复制
    import java.awt.Color;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import javax.swing.SwingUtilities;

    public class FlowComponentsTest
    {
        public static void main(String[] args)
        {
            SwingUtilities.invokeLater(new Runnable()
            {
                @Override
                public void run()
                {
                    final JPanel p = new JPanel();
                    for(int i = 1; i <= 20; i++)
                    {
                        JComponent c = new JTextField("I am element no. " + i);
                        //so any textfield will not steal the focus from the panel p
                        c.setFocusable(false);
                        p.add(c);
                        if(i == 5 || i == 6)
                        {
                            c.setForeground(Color.GREEN);
                            c.setVisible(false);
                        }
                    }
                    JFrame f = new JFrame();
                    f.addMouseListener(new MouseAdapter()
                    {
                        @Override
                        public void mousePressed(MouseEvent e)
                        {
                            JComponent c5 = (JComponent) p.getComponent(4);
                            JComponent c6 = (JComponent) p.getComponent(5);
                            c5.setVisible(!c5.isVisible());
                            c6.setVisible(!c6.isVisible());

                        if(e.getButton() == MouseEvent.BUTTON3)
                        {
                            System.out.println("Right click");
                            p.revalidate();
                            p.repaint();
                        }
                    }
                });
                f.setContentPane(p);
                f.setSize(300, 330);
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.setVisible(true);
            }
        });
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6056024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档