将类显示给另一个类

时间:2014-02-17 15:01:30

标签: java swing jframe

我正在为我的程序做我的主页,我想要发生的是当我点击迷宫按钮时,Maze类会出现并与六角形按钮相同。

你能告诉我我的程序出了什么问题吗?每次我跑步并点击一个按钮都没有任何反应。谢谢你的帮助。

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();
}

 }

2 个答案:

答案 0 :(得分:1)

在此之前,您的课程已经是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

上查看详情

答案 1 :(得分:0)

我曾经遇到过这样的事情。尝试使用setVisible()方法调整框架大小。试试这个:

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.setSize(400, 200);
        frame.pack();
    }
});
jb.addActionListener(new ActionListener(){
    public void actionPerformed (ActionEvent e)
    {
        h.setVisible(true);
        frame.setSize(400, 200);

    }
});
}