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