java - 将类(class)显示给另一个类(class)

标签 java swing jframe

您好,我正在为我的程序做主页,我希望当我单击迷宫按钮时,会出现迷宫类,并且与六边形按钮相同。

你能告诉我我的程序出了什么问题吗?每次我运行并单击按钮时都没有任何反应。感谢您的巨大帮助。

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Center extends JFrame {

Maze x = new Maze();
HEX h = new HEX();


JPanel jp = new JPanel();
JButton jb = new JButton("Maze");
JButton jb1 = new JButton("Hex");

JFrame frame = new JFrame();


public Center()
{
    frame.setTitle("Prims Maze Generation");
    //setVisible(true);
    //setSize(400,200);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    frame.setVisible(true);
    frame.setSize(400, 200);
    jp.add(jb);
    jp.add(jb1);
    frame.add(jp);

    jb.addActionListener(new ActionListener(){

        public void actionPerformed(ActionEvent e)
        {

            x.setVisible(true);
            frame.pack();
        }
    });
    jb.addActionListener(new ActionListener(){
        public void actionPerformed (ActionEvent e)
        {
            h.setVisible(true);

        }
    });

}

public static void main(String args[])
{
    Center p = new Center();
}

 }

最佳答案

首先,您的类已经是一个 JFrame,可以使用类 JFrame 或使用实例 JFrame (并删除 JFrame 扩展- 只做这个),不要两者都做!

您的问题和简单的修复(但可能不会产生您预期的结果)。

  • JFrame 有一个默认的 BorderLayout,当您添加组件时,它会自动放置在 BorderLayout.CENTER 位置。每个位置只能有一个组成部分。您试图在不知情的情况下向CENTER添加三个组件。修复是否为每个组件指定不同的位置,即 BorderLayout.NORTHBorderLayout.SOUTH

这是更清晰的修复

  • 使用CardLayout。假设 MazeHex 已经是 JPanels (如果它们不是,那么就这样。做这样的事情

    CardLayout card = new CardLayout();
    JPanel mainPanel = new JPanel(card);
    JPanel firstVisiblePanel = new JPanel();
    Hex hex = new Hex();
    Maze maze = new Maze();
    
    public Center() {
        mainPanel.add(firstVisiblePanel, "initialPanel");
        mainPanel.add(hex, "hex");
        mainPanel.add(maze, "maze");
    
        final JButton jbtHex = new JButton("Hex");
        jbtHex.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                card.show(mainPanel, "hex");
            }
        });
        // do the same as above for the other panels.
        ....
        frame.add(mainPanel); <------- This is the ONLY panel you add to the frame.
        frame.setVisible(true); <----- Should be the LAST thing you do.
    }
    
<小时/>

查看更多信息 How to Use CardLayout和一个正在运行的SO Example

关于java - 将类(class)显示给另一个类(class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21832378/

相关文章:

java - JFrame 中的背景图像

java - 确定一个int是否是Java中的回文?

java - 在 Java 中手动提交 Kafka 偏移量

java - 在 java maven 测试之前运行 python 脚本

swing - 斯卡拉 Swing : draggable/resizable component trait

java - 让 JButton 关闭窗口,但在关闭之前在 WindowClosing(WindowEvent e) 中运行代码

java - JFrame 上没有任何绘制

java - 是否可以通过 spout 或 bolt 停用和重新激活 Storm 拓扑?

java - (Java) 为什么我的 JFrame y 坐标偏离 22 点?

java - JFrame(全屏显示)背景颜色不变