我必须为学校制作一个游戏,而且我在点击jb按钮切换jpanel时遇到了一些麻烦。我想使用CardLayout,但我对Java还不熟悉,这使得它非常困难。我的目标是将我的所有面板放在不同的类中,比如类“Panel 1”,类“Panel 2”等等(而不是在我的主(JFrame)类中创建我的JPanel,这样我的代码更容易阅读)。是否可以将CardLayout容器放入包含my JFrame的类中?还有,我该把那该死的东西放在哪里?这是我的密码,希望你们能帮我!
主(JFrame)类
package invers;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class InversMain extends JFrame implements ActionListener
{
public CardLayout cardlayout;
public Container contentPane = this.getContentPane();
public InversMain()
{
JFrame frame = new JFrame();
frame.setLayout(cardlayout);
frame.setSize(1366,768);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Invers");
frame.setResizable(true);
frame.setVisible(true);
contentPane.setPreferredSize(new Dimension(600, 400));
contentPane.add(new InversMainPaneel(), "Panel 1");
contentPane.add(new InstellingenPaneel(), "Panel 2");
settingsButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cardlayout.show(contentPane, "Panel 1");
}
});}
public static void main ( String [] args)
{
new InversMain();
}
}
请注意,settingsButton是我在PANEL 1类中的按钮。因为它不是在我的主类中创建的,所以它会给出一个错误。我想参考我的设置按钮从PANEL 1类,从我的主类。这有可能吗?
面板1包含按钮的面板这是我的主菜单页
package invers;
import java.awt.Color;
import java.awt.Font;
import javax.swing.JButton;
import javax.swing.JPanel;
public class InversMainPaneel extends JPanel
{
private JButton nieuwSpelKnop = new JButton("Nieuw spel");
private JButton laadSpelKnop = new JButton("Laad Spel");
private JButton settingsButton = new JButton("Settings");
private JButton handleidingKnop = new JButton("Handleiding");
public InversMainPaneel()
{
this.setLayout(null);
nieuwSpelKnop.setSize(300,40);
nieuwSpelKnop.setFont(new Font("Arial", Font.BOLD, 25));
nieuwSpelKnop.setLocation(520,250);
nieuwSpelKnop.setVisible(true);
laadSpelKnop.setSize(300,40);
laadSpelKnop.setFont(new Font("Arial", Font.BOLD, 25));
laadSpelKnop.setLocation(520,350);
laadSpelKnop.setVisible(true);
settingsButton.setSize(300,40);
settingsButton.setFont(new Font("Arial", Font.BOLD, 25));
settingsButton.setLocation(520,450);
settingsButton.setVisible(true);
handleidingKnop.setSize(300,40);
handleidingKnop.setFont(new Font("Arial", Font.BOLD, 25));
handleidingKnop.setLocation(520,550);
handleidingKnop.setVisible(true);
this.add(nieuwSpelKnop);
this.add(laadSpelKnop);
this.add(settingsButton);
this.add(handleidingKnop);
this.setBackground(new Color(178,143,79));
}
}
}
面板2,用于测试CARDLAYOUT是否工作
package invers;
import java.awt.Color;
import javax.swing.JPanel;
public class InstellingenPaneel extends JPanel
{
public InstellingenPaneel()
{
this.setBackground(new Color(178,143,79));
}
}
请注意,settingsButton是我在PANEL 1类中的按钮。因为它不是在我的主类中创建的,所以它会给出一个错误。
我猜您得到的错误是告诉您,cardlayout
在内部类中被引用,因此必须成为final。要解决此问题,只需在创建cardlayout时插入final
关键字即可。
其次——是的,在单独的类中定义面板类型,然后创建这些类的实例以放置在JFrame中是完全可以接受的(并且符合最佳实践)。
第三,看起来“那该死的actionPerformed”放在了正确的位置(即作为ActionListener内部类中的一个方法),但是应该向其添加@Override
注释。你知道我的意思吗?
最后,如果您想从另一个类中引用settingsButton,您有几个选项。我建议将settingsButton声明为JFrame类的实例变量,并将对JFrame的引用传递给InverseMainPanel类的构造函数:
public InversMainPanel(InversMain im) {
...
im.settingsButton. //do something with the settings button.
从inversemain
类创建了一个inversemain面板
,如下所示:
InversMainPanel imp = new InversMainPanel(this)
使用此
引用调用的InversMain
实例。
如果我能进一步解释这些,请告诉我。
PS:请查看关于Java命名约定的本教程
您是否尝试过使用setContentPane方法设置JFrame contentpane?
因为我可以看到您声明了JFrame和一个内容窗格对象,但没有设置它,也没有使用面板设置它。
我是刚到爪哇的。我想把我的cardlayout添加到JFrame中。我之所以要这样做,是因为我可以通过关闭jframe在单击exit按钮时退出框架(窗口)。下面的程序是对JFrame的扩展。但我想声明JFrame,并在上面添加卡片。我试过了,但没有成功。我还想把card1的Jpanel设置为500(宽),500(高),但全屏显示。
我试图得到一个布局就像下面的图像为一个游戏在android studio 当前我的xml是 我想在下一个级别增加更多的卡(如lvl 2)我需要为每个级别做几个布局吗?
描述 (Description) 卡片HTML布局包含许多类,如下所示 - S.No 课程和描述 1 cards 这是卡片容器。 2 card-header 它是可选的卡片标题,用于显示卡片标题。 3 card-footer 它是可选的,用于指定其他信息或自定义链接。 4 card-content 它是卡内容的主要容器,是必需的。 5 card-content-inner 它是可选的附加内包装,用
问题内容: 我只是编写了一个简单的代码,希望在主框架上显示一个文本字段和一个按钮,但是运行全部后,我看到的是文本字段。 如果我在文本字段后编写按钮的代码,则仅显示按钮。 知道为什么吗? 问题答案: 将组件添加到JPanel,然后将该面板添加到JFrame的ContentPane。
在Go中,和之间有什么区别? 我发现两者都有效,但哪一个更好?
我想知道我们是否可以有一个布局不同于其父JFrame的JPanel。例如。如果我有JFrame与边框布局,我们有一个JPanel嵌入到它,它有不同的布局。有可能吗? 我正在努力做这件事。但是这样JPanel的组件就不会显示出来了。