Хочу по нажатию Кнопки спрятать одну панель, что позволит увидеть другую У меня такой код
class MyWindow extends JFrame {
public MyWindow (){
setTitle("X/O");
setBounds(300,300,400, 400);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
ImageIcon icon = new ImageIcon("icons.png");
setIconImage(icon.getImage());
JPanel mainPanel = new JPanel(); //Создаю панели
JPanel centerPanel = new JPanel();
JPanel bottomPanel = new JPanel();
JPanel centerPanelWindowOne = new JPanel();
JPanel centerPanelWindowTwo = new JPanel();
mainPanel.setBackground(Color.blue); //Цвета основных панелей
centerPanel.setBackground(Color.white);
bottomPanel.setPreferredSize(new Dimension(1,40));//Расположение остальных панелей
centerPanel.add(centerPanelWindowOne);
centerPanel.add(centerPanelWindowTwo);
centerPanelWindowOne.setPreferredSize(new Dimension(400,40));
centerPanelWindowTwo.setPreferredSize(new Dimension(400,40));
add(mainPanel, BorderLayout.CENTER); //Указываю компановку
add(bottomPanel, BorderLayout.SOUTH);
add(centerPanel, BorderLayout.CENTER);
mainPanel.setLayout(new FlowLayout());
centerPanel.setLayout(new FlowLayout());
bottomPanel.setLayout(new GridLayout());
centerPanelWindowOne.setLayout(new FlowLayout());
centerPanelWindowTwo.setLayout(new FlowLayout());
JButton start = new JButton("Старт");
bottomPanel.add(start);
JButton exit = new JButton("Выход");
bottomPanel.add(exit);
exit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
start.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
centerPanel.setVisible(false);
}
});
setVisible(true);
}
}
Итого, после нажатия кнопки Start хочу закрыть видимости centrePanel, и увидеть mainPanel, по моей логике я сначала создаю и показываю mainPanel, а затем centrePanel, и когда кнопкой я указываю видимость false для centrePanel, то должна отображаться mainPanel, но после кнопки start, в панель centrePanel закрывается, а там ничего, как правильно реализовать?
Код скопирован отсюда: https://pacificsimplicity.ca/blog/simple-state-switching-java-example-using-jpanels-and-jbuttons
Кратко идея следующая:
Когда надо сменить JPanel - просто удаляешь все с главной панели, добавляешь нужную и перерисовываешь, лучше еще сделать revalidate()
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
enum ViewState {
START_STATE, NEXT_STATE;
}
@SuppressWarnings("serial")
class Panel2 extends JPanel {
public Panel2() {
JPanel panel2 = new JPanel();
JButton button = new JButton("sweet");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
MyWindowTest.changeState(ViewState.START_STATE);
}
});
panel2.add(button);
this.add(panel2);
}
}
@SuppressWarnings("serial")
class Panel1 extends JPanel {
public Panel1() {
JPanel panel1 = new JPanel();
JButton button = new JButton("my button");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
MyWindowTest.changeState(ViewState.NEXT_STATE);
}
});
panel1.add(button);
this.add(panel1);
}
}
public class MyWindowTest {
private static ViewState viewState;
private static JPanel mpanel;
private static JPanel panel1;
private static JPanel panel2;
private static JFrame frame;
public MyWindowTest() {
frame = new JFrame();
mpanel = new JPanel();
panel1 = new Panel1();
panel2 = new Panel2();
// Sets default state
changeState(ViewState.START_STATE);
frame.setSize(100, 100);
frame.add(mpanel);
frame.setVisible(true);
}
public static void changeState(ViewState state) {
viewState = state;
System.out.println("change state: " + viewState);
switch (state) {
case START_STATE:
mpanel.removeAll();
mpanel.add(panel1);
mpanel.revalidate();
mpanel.repaint();
break;
case NEXT_STATE:
mpanel.removeAll();
mpanel.add(panel2);
mpanel.revalidate();
mpanel.repaint();
break;
default:
System.out.println("UNKNOWN STATE!");
break;
}
}
public static void main(String[] args) {
@SuppressWarnings("unused")
MyWindowTest n = new MyWindowTest();
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Почему у элемента exampleblock не появляется скроллбар? Если допустим ему задать ширину 100%, то не работаетЕсли например задать ширину для container__content,...
Есть url страницы сайта, как c данной страницы можно получить картинку с id "image"? Допустим, что url: wwwimages
Каким образом можно вывести кнопки сбоку в одну колонку, чтобы они плавали?