0

GUIアプリケーションで一部のJPanelのサイズを変更すると、この問題が発生します。アプリケーションには、他の2つのJPanelを含むメインのJLayeredPaneがあります。JPanel 1には、ログインフォームとボタンがあります。ボタンを押すと、最初のJPanelを非表示にし、2番目の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))
        );

LE:

ボタンの場合:

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))
        );

    }
4

2 に答える 2

1

最後にvalidate()とrepaint()を呼び出してみてください。

于 2011-05-05T12:27:13.913 に答える
0

CardLayoutを使用します。

于 2011-05-05T12:41:45.613 に答える