Я хочу сделать так, чтобы 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();
}
}
* «SetVisible не работает» * - Вы никогда не называют 'cardPanel.setVisible (...)' в вашем публикуемую коде ... Он отлично работает для меня, когда я реализую что. Обновите свой пример, включая проблему 'setVisible'. Но если это на самом деле код, создающий проблему, которую вы описываете, я честно не понимаю, какова фактическая проблема ... Кстати, вашему классу не нужно расширять 'JFrame', поэтому удалите это и измените имя класса для чего-то еще, так как это немного вводит в заблуждение, потому что вы используете отдельный экземпляр JFrame в коде. –
ОК. Где вы его реализовали. Какая линия. он не работает для меня. Я снял расширение. –
Ну, это «работает» для меня, предполагая, что я правильно понял вопрос. Я понял это так, как вы хотите, чтобы панель карты была невидимой, если не был нажат переключатель. Итак, если это правильно, я помещаю 'cardPanel.setVisible (false);' именно там, где вы делали и добавляли 'cardPanel.setVisible (true);' прямо перед 'cardLayout.show (cardPanel,« One »);'. –