我想使它成为cardPanels不可见,直到cardPanel上没有的动作完成。例如,当您在该窗口上选择某个Jradiobutton时,会打开一个窗口。我想使用setVisible(boolean)来做到这一点。但是,setVisible由于某种原因不起作用。有什么我失踪?cardPanel的setVisible()不起作用
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);'放在'cardLayout.show(cardPanel,“One”);'之前'并且在'cardPanel.setVisible(true) –