2016-08-16 4 views
0

Я хочу сделать так, чтобы cardPanels не были видны до тех пор, пока действие, которое не находится на cardPanel, будет завершено. Например, открывается окно, когда вы выбираете определенный Jradiobutton в этом окне. Я хочу использовать setVisible (boolean) для этого. Однако setVisible не работает по какой-то причине. Есть что-то, что мне не хватает?setVisible() для cardPanel не работает

import java.awt.BorderLayout; 
import java.awt.CardLayout; 
import java.awt.Component; 
import java.awt.Container; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JRadioButton; 

public class MainFrame extends JFrame { 

    private JFrame frame = new JFrame("Swing Refresh Bug?"); 
    private Container contentPane = frame.getContentPane(); 
    private JPanel cardPanel = new JPanel(); 
    private CardLayout cardLayout = new CardLayout(); 
    private Component currentComponent; 
    private JButton next; 

    MainFrame() { 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     // properties of the cardPanel 
     cardPanel.setLayout(cardLayout); 
     cardPanel.add(new JLabel("One"), "One"); 
     cardPanel.add(new JLabel("Two"), "Two"); 
     cardPanel.add(new JLabel("Three"), "Three"); 
     cardPanel.setVisible(false); 

     // Create a radio button 
     JRadioButton addNext = new JRadioButton("Add next"); 

     // Add the radio buttons listener 
     addNext.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       cardLayout.show(cardPanel, "One"); 
      } 
     }); 

     // Set the layout of the content pane. 
     contentPane.setLayout(new BorderLayout()); 
     contentPane.add(cardPanel, BorderLayout.CENTER); 
     contentPane.add(addNext, BorderLayout.SOUTH); 

     frame.pack(); 
     frame.setVisible(true); 
    } 

    public MainFrame(String title) { 

     MainFrame mf = new MainFrame(); 
    } 

} 
+3

* «SetVisible не работает» * - Вы никогда не называют 'cardPanel.setVisible (...)' в вашем публикуемую коде ... Он отлично работает для меня, когда я реализую что. Обновите свой пример, включая проблему 'setVisible'. Но если это на самом деле код, создающий проблему, которую вы описываете, я честно не понимаю, какова фактическая проблема ... Кстати, вашему классу не нужно расширять 'JFrame', поэтому удалите это и измените имя класса для чего-то еще, так как это немного вводит в заблуждение, потому что вы используете отдельный экземпляр JFrame в коде. –

+0

ОК. Где вы его реализовали. Какая линия. он не работает для меня. Я снял расширение. –

+0

Ну, это «работает» для меня, предполагая, что я правильно понял вопрос. Я понял это так, как вы хотите, чтобы панель карты была невидимой, если не был нажат переключатель. Итак, если это правильно, я помещаю 'cardPanel.setVisible (false);' именно там, где вы делали и добавляли 'cardPanel.setVisible (true);' прямо перед 'cardLayout.show (cardPanel,« One »);'. –

ответ

0

Инициализировать его в ActionListener не в конструкторе. После этого вы также должны сказать setVisible (true). Я думаю, вы можете сделать класс CardPannel, который расширяет JPannel. Есть больше смысла делать это так. Вместо добавления JLabels в конструкторе MainFrame сделайте это в конструкторе CardPannel. Я нахожусь на своем телефоне, поэтому я не могу показать вам код прямо сейчас. Надеюсь, я помог.

0

Ваш класс не должен простираться JFrame, вы уже создали JFrame в классе, если вы хотите переместить accross карт измените ActionListener следующим

addNext.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
      cardLayout.next(cardPanel); 
      } 
     }); 
0

Устанавливает cardPanel не видимый на setVisible(false), но вам никогда не устанавливайте его в true, так что ваш cardPanel (содержащий ваш cardLayout) никогда не отображается!

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

Вы также можете использовать метод isSelected() из JRadioButton, чтобы проверить, нажато ли оно или нет. Например:

addNext.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      if(addNext.isSelected()){ 
       cardPanel.setVisible(true);     
       cardLayout.show(cardPanel, "One"); 
      } 
      else{ 
       cardPanel.setVisible(false); 
       //or : cardLayout.show(cardPanel, "Two"); 
      } 
     } 
    }); 

Если вы хотите JFrame будет открыт этот путь, как раз перед тем его создающих, установив его не видно. Затем вы устанавливаете его видимым в слушателе.

Я надеюсь, что это помогло :)

 Смежные вопросы

  • Нет связанных вопросов^_^