Я пишу простую программу, используя CardLayout. На главном экране должна отображаться кнопка, которая при нажатии переходит к следующему экрану, который содержит другую кнопку для другого экрана. Моя проблема в том, что когда я запускаю свою программу, экран черный. Я пробовал следующие учебники онлайн, чтобы написать свою собственную программу, но, похоже, я не нашел проблему с моим кодом. При запуске я не получаю никаких ошибок. Вот мой кодкак показать другой экран
//using CardLayout to change screen when action is performed
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.Popup;
import javax.swing.JOptionPane;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.FlowLayout;
public class CL extends JFrame {
JPanel cardPanel;
JPanel cardPanelA;
JPanel cardPanelB;//to set different screens
CardLayout cl;
private JButton button1;
private JButton button2;
private JButton change;
private JLabel label;
private JTextField textField1;
private JTextField textField2;
JButton button;
public CL() {
super("This is a sample");
cardPanel = new JPanel();
cardPanelA = new JPanel();
cardPanelB = new JPanel();
cl = new CardLayout();
cardPanel.setLayout(cl);
button1 = new JButton("button1");
button2 = new JButton("button2");
change = new JButton("change screen");
label = new JLabel("this is a label");
textField1 = new JTextField(10);
textField2 = new JTextField("enter text", 6);
cardPanelA.add(change);
cardPanelA.add(label);
cardPanelA.add(textField1);
cardPanelA.add(textField2);
cardPanelB.add(button1);
cardPanelB.add(button2);
cardPanel.add(cardPanelA);
cardPanel.add(cardPanelB);
JPanel panel1 = new JPanel();
button = new JButton("initial button");
panel1.add(button);
theHandler handler = new theHandler();//make action listener
change.addActionListener(handler);
button1.addActionListener(handler);
button2.addActionListener(handler);
button.addActionListener(handler);
/*
getContentPane().add(panel1, BorderLayout.NORTH);
getContentPane().add(cardPanelA, BorderLayout.NORTH);
getContentPane().add(cardPanelB, BorderLayout.NORTH);
*/
}
private class theHandler implements ActionListener {
public void actionPerformed(ActionEvent event) {
if (event.getSource() == button) {
cl.show(cardPanel, "Panel A");
}
if (event.getSource() == change) {
cl.show(cardPanelB, "panelB");
}
if (event.getSource() == button2) {
cl.show(cardPanel, "PanelA");
}
if (event.getSource() == button1) {
JOptionPane.showMessageDialog(null, "this is the second screen");
}
}
}
}
/* способ использования CardLayout: создать менеджер CardLayout и создать кучу разных JPanel, которые * бы каждому из них будет другой экран. Создайте панель, в которой MapLayout хранится как макет. * Добавить различные элементы в каждой панели (кнопки, текстовые поля), а затем добавить к панели JPanel, который хранит * CardLayout */
import javax.swing.JFrame;
public class CardTest {
public static void main(String[] args) {
CL object = new CL();
object.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
object.setSize(400, 400);
object.setVisible(true);
}
}
Это может быть что-то простое, но я не уверен, что это. Некоторые советы будут оценены.
Это может быть глупым предложением, но убедитесь, что вы бежите весь код GUI через диспетчеризацию событий нить. Раньше у меня были проблемы с моим старым, медленным нетбуком, когда я этого не делал, и я считаю, что одним из симптомов было то, что все черное, хотя я плохо помню. – Kon