2013-08-16 2 views
1

http://imgur.com/VT3JHH8 Это то, что я пытаюсь создать по существу, чтобы начать игру на основе меню. Мне интересно, хороший ли мой подход. Я создал класс кадров «SonomaRoller», показанный ниже. В этом классе он добавляет «frame» мою «панель1», как показано на диаграмме. На данный момент у меня также есть мои образы, созданные в этом классе, которые отображаются как «panel2». Я хочу, чтобы пользователь мог переключаться между панелями с помощью кнопок в панели 1. Некоторые панели, на панели 2, тоже будут иметь собственные кнопки. Каков наилучший подход для этого? Должен ли я создавать отдельные классы для панелей и добавлять их в JFrame? Должен ли я переключаться между панелями с помощью JFrame, так как он добавляет первую панель? Я включил мой код ниже для моих двух классов. У меня также есть панель Jtext ниже, где находятся панели. Заранее спасибоПереключение между несколькими JPanels внутри JFrame

__ _ __ _ __ _ __ _ __ _ ____МОЯ КАДР_ __ _ __ _ __ _ __ _ __ _ ___

package sonomaroller; 

import javax.swing.*; 
import java.awt.*; 
import static javax.swing.JFrame.*; 

public class SonomaRoller extends JFrame { 

    public static Dimension size = new Dimension(550,550); //Dimension of Frame 
    public static String title = "Sonoma Roller v0.00" ; 
    //Creates new object f to create the window 

    //boolean 
    public boolean addShop=false; 

    public SonomaRoller(){ 

     setTitle(title); 
     setSize(size); 
     setResizable(false); 
     setLocationRelativeTo(null); // null centers window on screen 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     init(addShop); 
    } 
    public void init(boolean addShop){ 
     frame panel=new frame(); 

     panel.setLayout(null); 
     add(panel); 
     setVisible(true); 

    } 
    public static void main(String[] args) { 

     SonomaRoller object1=new SonomaRoller(); 

    } 
} 

__ _ __ _ __ _ __ _ __ _ ____МОЯ ПАНЕЛЬ ж/Кнопки_ __ _ __ _ __ _ __ _ __ _ ___

package sonomaroller; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.text.BadLocationException; 
import javax.swing.text.DefaultCaret; 

import javax.swing.text.StyledDocument; 
import javax.swing.text.Style; 
import javax.swing.text.StyleConstants; 

public class frame extends JPanel implements Runnable { 


    public void run(){ 

    } 

    public frame(){ 

     loadpics(); 
     attackButton(); 
     magicButton(); 
     travelButton(); 
     shopButton(); 
     textField(); 

    } 
    public void paintComponent(Graphics g){ 


    } 

    } 
    public void textField(){ 


} 
    public void attackButton(){ 

    } 
    public void magicButton(){ 

    } 
    public void travelButton(){ 

    } 
    public void shopButton(){ 

    } 

    public void loadpics(){ 
     Sonoma = new ImageIcon("C:\\Users\\Camtronius\\Documents\\NetBeansProjects\\SonomaRoller\\src\\sonomaroller\\testImage.jpg").getImage(); 
     System.out.println("image loaded"); 
     loaded = true; 
     repaint(); 
    } 

} 
+1

Только __STOP__ Теперь, прежде чем продолжить, сдерживать себя от использования [абсолютного позиционирования] (http://docs.oracle.com/javase/tutorial/uiswing/layout/none.html), просто прочитайте первый абзац, в котором говорится об ошибках использования такого подхода. Для этой задачи рассмотрите [CardLayout] (http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html). Один связанный [пример] (http://stackoverflow.com/a/9349137/1057230) :-) –

+0

Кроме того, вопрос обработки изображений в вашем проекте сомнительный. Что делать, если вы передаете этот проект своему знакомому вашему тесту, тогда человек должен сначала предоставить изображения в том же месте, что и в вашем методе 'loadpics()', что, если у человека нет «Диск» C'? Пожалуйста, взгляните на этот [ответ] (http://stackoverflow.com/a/9866659/1057230), проверьте заголовок 'NetBeans', за информацию, связанную с этой штукой :-) –

ответ

1

Вы можете не использовать ActionListener установить панель видимым или невидимым, нажав на кнопку. Например:

panel_1Button.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent e){ 
      panel1.setVisible(false) 
      panel2.setVisible(true); 
     } 
    }); 
Смежные вопросы