Навигация между JPanels? - PullRequest
0 голосов
/ 30 января 2012

У меня проблема, когда я нажимаю кнопку, чтобы изменить содержимое right_pan (JPanel), ничего не происходит; У меня есть 3 JPanel: В этом состоит два других: right_pan и left_pan (интегрированы в основной JFrame с именем «main», смотрите скриншот) и другой внешний JPanel с именем cree_client (содержит текстовое поле).

enter image description here

Мне бы хотелось, чтобы при нажатии кнопки содержимое cree_client (JPanel) загружалось в right_pan (JPanel).

Я пробовал это, но это не работает:

  private void jMenuItem23ActionPerformed(java.awt.event.ActionEvent evt) {

  cree_client cc=new cree_client();
  this.right_pan.removeAll();
  this.right_pan.validate();
  this.right_pan.add(cc);
  this.right_pan.revalidate();

}

ЛЮБОЕ помогает?

Ответы [ 2 ]

2 голосов
/ 31 января 2012

Первое правило использования любого инструментария пользовательского интерфейса: не удаляйте и не добавляйте дочерние элементы для контроля видимости.Это никогда не работает очень хорошо почти в любом наборе инструментов пользовательского интерфейса.Требуется больше работы над инструментарием, чтобы правильно с ним справиться, а для Swing это удваивается.Вместо этого используйте либо видимость, либо я уверен, что вы должны использовать CardLayout.Панель с CardLayout позволит вам переключаться между несколькими экранами:

public class StackPanel extends JPanel {

    CardLayout layout = new CardLayout();
    public StackPanel() {
        super();
        setLayout( layout );
    }

    public addStack( String name, JComponent child ) {
        add( name, child );
    }

    public void showStack( String name ) {
        layout.show( this, name );
    }
}


CardLayout layout = new CardLayout();
StackPanel stack = new StackPanel();
stack.addStack( "panelOne", panelOne );
stack.addStack( "panelTwo", panelTwo );
...
JButton someButton = new JButton( new AbstractAction("Next" ) {
    public void actionPerformed(ActionEvent evt ) {
       stack.showStack( "panelTwo" );
    }
} );

Если вы не хотите переключаться между двумя или более экранами, то вы можете использовать setVisible(), чтобы скрыть и показатьразные экраны точно так же.

0 голосов
/ 31 января 2012

Прежде всего, вы действительно проверили, выполняется ли код в вашем слушателе действий?Я не очень знаком с JMenu s, но я думаю, что метод должен быть больше похож на

public void ActionPerformed(ActionEvent evt){...}

, и слушатель действия должен быть добавлен к самому JMenuItem - быстрый оператор System.out.println() вОсновная часть метода выполненного действия должна помочь вам определить, выполняется код для изменения JPanel или нет!

Во-вторых, если ваш метод actionPerformed запущен, вы можете попробовать запустить метод Component.repaint() после повторной проверки.,Кроме того, возможно, стоит попытаться «переоценить» и «перерисовать» основной JPanel, в котором находится тот, который вы меняете (в вашем случае родитель right_pan)!

...