【问题标题】:Dynamic GUI size动态 GUI 大小
【发布时间】:2011-05-05 12:22:18
【问题描述】:

我在 GUI 应用程序中调整一些 JPanel 的大小时遇到​​了这个问题。该应用程序有一个主 JLayeredPane,其中包含 2 个其他 JPanel。在 JPanel 1 中,我有一个登录表单和一个按钮。当我按下按钮时,我想让第一个 JPanel 不可见,第二个 JPanel 可见(这个面板比第一个大),但保持相同的大小。贝娄是一些相关的代码。谁能帮帮我?

int width=300, height=300;
JLayeredPane mainPanel;
JPanel panel1;
JPanel panel2;

panel1.setBounds(0,0,width,height);
panel1.setBackground(new Color(251, 249, 236));
mainPanel.add(panel1, JLayeredPane.DEFAULT_LAYER);

panel2.setBounds(0, 0, width+200, height+200);
panel2.setBackground(new Color(255, 0, 0));
mainPanel.add(panel2, JLayeredPane.DEFAULT_LAYER);

以及点击的按钮代码:

setSize(width+200, height+200);
    panel1.setVisible(false);
    panel2.setVisible(true);
    mainPanel.setSize(width+200, height+200);
    mainPanel.validate();
    mainPanel.repaint();

这是 JLayredPane 的一些代码:

GroupLayout mainLayout=new GroupLayout(getContentPane());
        getContentPane().setLayout(mainLayout);

        mainLayout.setHorizontalGroup(mainLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addGroup(mainLayout.createSequentialGroup()
                    .addComponent(mainPanel, GroupLayout.PREFERRED_SIZE, width, GroupLayout.PREFERRED_SIZE))
        );
        mainLayout.setVerticalGroup(mainLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addGroup(mainLayout.createSequentialGroup()
                    .addComponent(mainPanel, GroupLayout.PREFERRED_SIZE, height, GroupLayout.PREFERRED_SIZE))
        );

乐:

对于按钮:

setSize(width+200, height+200);

        mainPanel.setSize(width+200, height+200);
        mainPanel.remove(panel1);
        mainPanel.remove(panel2);
        mainPanel.add(panel2, JLayeredPane.DEFAULT_LAYER);
        actualizare();
        mainPanel.validate();
        mainPanel.repaint();
        validate();
        repaint();

功能:

void actualizare(){
        GroupLayout mainLayout=new GroupLayout(getContentPane());
        getContentPane().setLayout(mainLayout);

        mainLayout.setHorizontalGroup(mainLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addGroup(mainLayout.createSequentialGroup()
                    .addComponent(mainPanel, GroupLayout.PREFERRED_SIZE, width+200, GroupLayout.PREFERRED_SIZE))
        );
        mainLayout.setVerticalGroup(mainLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addGroup(mainLayout.createSequentialGroup()
                    .addComponent(mainPanel, GroupLayout.PREFERRED_SIZE, height+200, GroupLayout.PREFERRED_SIZE))
        );

    }

【问题讨论】:

  • 为什么不按照 Harry Joy 的建议删除 panel1,然后添加 panel2,然后在 mainPanel 上调用 repaint

标签: java resize jpanel jlayeredpane


【解决方案1】:

尝试在最后调用 validate() 和 repaint()。

【讨论】:

  • 验证和重绘应该调用什么?
  • 首先尝试调用 repaint() 和 validate() 来为您正在执行此操作的框架调用 setSize(width+200.,height+200) 然后尝试以下操作:尝试将面板添加/删除到 mainPanel 而不是更改可见性标志.
  • 我已经编辑了一些代码并添加了mainPanel的代码。
  • @lonut:试试这个:setSize(width+200, height+200); panel1.setVisible(false); panel2.setVisible(true); mainPanel.setSize(width+200, height+200); mainPanel.validate(); mainPanel.repaint(); validate();repaint()
  • @Harry:还是什么都没有。尝试使用添加/删除的第二种方法。
【解决方案2】:

使用CardLayout

【讨论】:

    猜你喜欢
    • 2012-07-18
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多