java - 消失时可调整大小的布局 Swing JPanel

标签 java swing layout jpanel

我在其他 jPanel(panelB) 中添加了许多 jPanel (panelF)。 jPanelF 包含 jPanelC。 enter image description here

我已将布局设置为按如下方式添加它们:

    PanelB.setLayout(new BoxLayout(this.PanelB, BoxLayout.PAGE_AXIS));
    PanelF panelF1 = new PanelF(); 
    PanelB.add(panelF1);
    PanelF panelF2 = new PanelF(); 
    PanelB.add(panelF2);

我在 jPanelC1 中设置了 visible false。但是 JPanelF2 保留了距离,不想留下空白

enter image description here 我想要的是当 JPanelC1 消失时。 jPanelF 之间保持距离而不是空白。 我尝试了 validate() 并更改了布局,但我失败了。怎么办? 非常感谢你。对不起我的英语

知道是否有类似 $("#panelC1").fadeOut("slow") 的东西?会很理想。

最佳答案

(这是垂直布局的演示,不是答案本身)。

根据我对您问题的理解,VerticalLayout 可能是首选解决方案...

enter image description here

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.LineBorder;
import org.jdesktop.swingx.VerticalLayout;

public class VerticalLayoutTest {

    public static void main(String[] args) {
        new VerticalLayoutTest();
    }

    public VerticalLayoutTest() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {

            setLayout(new VerticalLayout());

            JPanel outter = new JPanel(new BorderLayout());
            outter.setBorder(new LineBorder(Color.BLACK));
            outter.add(new JLabel("Outter 1"), BorderLayout.NORTH);
            JPanel inner = new JPanel(new GridBagLayout());
            inner.setBackground(Color.GREEN);
            inner.add(new JLabel("Inner 1"));
            outter.add(inner);
            add(outter);

            inner.addMouseListener(new MouseAdapter() {

                @Override
                public void mouseClicked(MouseEvent e) {
                    Component component = e.getComponent();
                    component.setVisible(false);
                    component.invalidate();
                    component.validate();
                    revalidate();
                    repaint();
                }

            });

            add(Box.createVerticalGlue());

            outter = new JPanel(new BorderLayout());
            outter.setBorder(new LineBorder(Color.BLACK));
            outter.add(new JLabel("Outter 1"), BorderLayout.NORTH);
            inner = new JPanel(new GridBagLayout());
            inner.setBackground(Color.GREEN);
            inner.add(new JLabel("Inner 1"));
            outter.add(inner);
            add(outter);

        }
    }
}

关于java - 消失时可调整大小的布局 Swing JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19148603/

相关文章:

java - 简单的 Netty 处理程序,逐字节遍历消息

java - 如何在重定向之间保留模型属性?

java - Java 中的文本数组

Java - 打印 HTML 元素的任何细节

java - JTable 渲染器中的按钮文本不可见。为什么?

java - Vaadin MVP 按钮点击不起作用

java - GUI 表单设计数据绑定(bind)的优缺点

objective-c - 在 iOS 中使用相对位置布局 View 的最佳方式?

git - 有哪些流行的 Git 布局策略?

java - 文本不在模拟器中未显示,它在图形布局中的位置