我想使它成爲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) –