2014-02-17 6 views
0

Привет, я делаю свою основную страницу для своей программы, и я хочу, чтобы это произошло, когда я нажимаю кнопку лабиринта, класс лабиринта появится и тот же с шестиугольной кнопкой.отображение класса другому классу

Можете ли вы сказать мне, что не так с моей программой? Каждый раз, когда я запускаю и нажимаю кнопку, ничего не происходит. Спасибо за огромную помощь.

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

} 
+0

что Maze п Hex, проходящий от? – Sanjeev

ответ

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

    } 
}); 
} 
+0

Я уже пробовал, но все же, он не работает. Ничего не происходит, если вы нажмете кнопку. – user96913

+0

Можете ли вы загрузить проект Eclipse (если вы используете Eclipse)? – MrLolEthan

+0

, где я могу загрузить? Извините за новинку. :) – user96913

1

Прежде чем угодно, ваш класс уже JFrame, либо использовать класс JFrame или использовать экземпляр JFrame (и удалить расширение JFrame - просто это сделать), не делают как!

Ваша проблема и Простое исправление (но может не дать ожидаемых результатов).

  • JFrame имеет значение по умолчанию BorderLayout, который при добавлении компонентов, будет автоматически помещен в BorderLayout.CENTER положения. В каждой позиции может быть только один компонент. Вы пытаетесь добавить три компонента на CENTER, даже не зная об этом. Исправление если указать другую позицию для каждого компонента, т.е. BorderLayout.NORTH, BorderLayout.SOUTH

Вот гораздо чище Устранить

  • Используйте CardLayout. Предполагая Maze и Hex уже 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

Смежные вопросы