Я пытаюсь сделать базовый проект Swing и пытаюсь выяснить, как наилучшим образом менять карты из панелей при использовании макета карты.
Единственный способ, которым мне удалось заставить это работать, состоит в том, чтобы разобрать главное окно в каждой панели на нем. Считается ли это правильным способом сделать это? Или есть лучший способ?
Вот пример того, что я имею в виду:
Класс главного окна:
import java.awt.EventQueue;
import javax.swing.JFrame;
import java.awt.CardLayout;
import javax.swing.JPanel;
import java.awt.Color;
public class Window {
private JFrame frame;
private CardLayout cardLayout;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Window window = new Window();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public Window() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new CardLayout());
Orange orange = new Orange(this);
orange.setBackground(Color.ORANGE);
frame.getContentPane().add(orange, "orange");
Green green = new Green(this);
green.setBackground(Color.GREEN);
frame.getContentPane().add(green, "green");
//Shows orange by default
cardLayout = (CardLayout) frame.getContentPane().getLayout();
cardLayout.show(frame.getContentPane(), "orange");
}
//Changes the currently shown card to the "Green" Panel
public void goGreen() {
cardLayout.show(frame.getContentPane(), "green");
}
//Changes the currently shown card to the "Orange" Panel
public void goOrange() {
cardLayout.show(frame.getContentPane(), "orange");
}
}
Оранжевая панель:
import javax.swing.JPanel;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Color;
public class Orange extends JPanel {
private Window parent;
public Orange(Window parent) {
this.parent = parent;
setBackground(Color.ORANGE);
//Adds a button to change to the "Orange" Panel
JButton btnGoGreen = new JButton("Go Green Panel");
btnGoGreen.setBounds(188, 132, 89, 23);
btnGoGreen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//Function of the parent Window.class to change to the Orange Panel
parent.goGreen();
}
});
add(btnGoGreen);
}
}
Зеленая панель:
import javax.swing.JPanel;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Color;
public class Green extends JPanel {
private Window parent;
public Green(Window parent) {
this.parent = parent;
setBackground(Color.GREEN);
//Adds a button to change to the "Green" Panel
JButton btnGoOrange = new JButton("Go Orange Panel");
btnGoOrange.setBounds(188, 132, 89, 23);
btnGoOrange.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//Function of the parent Window.class to change to the Orange Panel
parent.goOrange();
}
});
add(btnGoOrange);
}
}