[英]java.lang.IllegalArgumentException: cannot add to layout: constraint must be a string
I am having difficulty with CardLayout Manager
in my code. 我的代码中的
CardLayout Manager
遇到了问题。 I can't figure out why i am getting this exception. 我无法弄清楚为什么我会得到这个例外。 I am passing a string in the
CardLayout.show()
method but still i get this error. 我在
CardLayout.show()
方法中传递一个字符串但仍然出现此错误。 Please help. 请帮忙。 This is my main class.
这是我的主要课程。
@SuppressWarnings("serial")
public class Main extends JFrame implements ActionListener {
final static String mainMenuPanel = "Main Menu";
final static String creditsPanel = "Credits";
final static String introPanel = "Introduction";
private CardLayout cardLayout = new CardLayout();
private JPanel cards = new JPanel(cardLayout);
public Main(){
//Create and set up the window.
super();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(new CardLayout());
//this.pack();
this.setVisible(true);
this.setSize(new Dimension(800,600));
this.setLocationRelativeTo(null);
this.setTitle("Wise Frog Productions.");
cards.add(new IntroGamePanel(),introPanel);
cards.add(new MainMenu(),mainMenuPanel);
this.add(cards);
swapView(mainMenuPanel);
}
public void swapView(String s){
cardLayout.show(cards,s);
}
public void actionPerformed(ActionEvent event){
}
public static void main(String[] args){
javax.swing.SwingUtilities.invokeLater(new Runnable(){
public void run(){
new Main();
}
});
}
This is my outside class from which i am swapping the card. 这是我在外面上课,我正在交换卡片。
public class IntroGamePanel extends JPanel implements MouseInputListener{
private Main main;
ImageIcon beginButtonIcon1 = new ImageIcon(IntroGamePanel.class.getResource("begin_0.gif"));
ImageIcon beginButtonIcon2 = new ImageIcon(IntroGamePanel.class.getResource("begin_1.gif"));
JButton beginButton = new JButton("", beginButtonIcon1);
public IntroGamePanel(){
super();
this.setOpaque(true);
this.add(beginButton);
this.setPreferredSize(new Dimension(800,600));
beginButton.setPreferredSize(new Dimension(200,36));
beginButton.setLocation(240,40);
beginButton.addMouseMotionListener(this);
beginButton.addMouseListener(this);
beginButton.setEnabled(true);
}
@Override
//This will take us to the main menu screen.
public void mouseClicked(MouseEvent e) {
if(main != null){
main.swapView(Main.mainMenuPanel);
}
}
@Override
public void mouseEntered(MouseEvent e) {
beginButton.setIcon(beginButtonIcon2);
}
@Override
public void mouseExited(MouseEvent e) {
beginButton.setIcon(beginButtonIcon1);
}
@Override
public void mousePressed(MouseEvent e) {
//not needed
}
@Override
public void mouseReleased(MouseEvent e) {
//not needed
}
@Override
public void mouseDragged(MouseEvent e) {
//not needed
}
@Override
public void mouseMoved(MouseEvent e) {
//not needed
}
public void getMain(Main main){
this.main = main;
}
}
I need some help regarding this quite urgently actually. 实际上,我迫切需要一些帮助。 :(
:(
The error comes from the line 该错误来自该行
this.add(cards);
Since you changed the layout of this into a CardLayout
you have to specify a string as second argument. 由于您将此布局更改为
CardLayout
,因此必须将字符串指定为第二个参数。
Are you sure you wanted Main
to have a CardLayout
? 你确定要
Main
有CardLayout
吗? Your panel cards
already contains such a layout. 您的面板
cards
已经包含这样的布局。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.