поэтому у меня есть этот jFrame с панелью. Внутри этой панели есть еще две панели, а макет установлен на карты. Внутри одной из этих панелей есть кнопка. Как изменить панель, отображаемую при нажатии этой кнопки?Разметка карты Swing карты измените отображаемую панель?
ответ
Пробуйте этот фрагмент кода, надеемся, что комментарии могут помочь вам понять последовательность.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/* Here we are first declaring our class that will act as the
* base for other panels or in other terms the base for CardLayout.
*/
public class CardLayoutTest
{
private static final String CARD_JBUTTON = "Card JButton";
private static final String CARD_JTEXTFIELD = "Card JTextField";
private static final String CARD_JRADIOBUTTON = "Card JRadioButton";
private static void createAndShowGUI()
{
JFrame frame = new JFrame("Card Layout Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
// This JPanel is the base for CardLayout for other JPanels.
final JPanel contentPane = new JPanel();
contentPane.setLayout(new CardLayout(20, 20));
/* Here we be making objects of the Window Series classes
* so that, each one of them can be added to the JPanel
* having CardLayout.
*/
Window1 win1 = new Window1();
contentPane.add(win1, CARD_JBUTTON);
Window2 win2 = new Window2();
contentPane.add(win2, CARD_JTEXTFIELD);
Window3 win3 = new Window3();
contentPane.add(win3, CARD_JRADIOBUTTON);
/* We need two JButtons to go to the next Card
* or come back to the previous Card, as and when
* desired by the User.
*/
JPanel buttonPanel = new JPanel();
final JButton previousButton = new JButton("PREVIOUS");
previousButton.setBackground(Color.BLACK);
previousButton.setForeground(Color.WHITE);
final JButton nextButton = new JButton("NEXT");
nextButton.setBackground(Color.RED);
nextButton.setForeground(Color.WHITE);
buttonPanel.add(previousButton);
buttonPanel.add(nextButton);
/* Adding the ActionListeners to the JButton,
* so that the user can see the next Card or
* come back to the previous Card, as desired.
*/
previousButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
CardLayout cardLayout = (CardLayout) contentPane.getLayout();
cardLayout.previous(contentPane);
}
});
nextButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
CardLayout cardLayout = (CardLayout) contentPane.getLayout();
cardLayout.next(contentPane);
}
});
// Adding the contentPane (JPanel) and buttonPanel to JFrame.
frame.add(contentPane, BorderLayout.CENTER);
frame.add(buttonPanel, BorderLayout.PAGE_END);
frame.pack();
frame.setVisible(true);
}
public static void main(String... args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
}
}
class Window1 extends JPanel
{
/*
* Here this is our first Card of CardLayout, which will
* be added to the contentPane object of JPanel, which
* has the LayoutManager set to CardLayout.
* This card consists of Two JButtons.
*/
private ActionListener action;
public Window1()
{
init();
}
private void init()
{
final JButton clickButton = new JButton("CLICK ME");
final JButton dontClickButton = new JButton("DON\'T CLICK ME");
action = new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
if (ae.getSource() == clickButton)
{
JOptionPane.showMessageDialog(null, "Hello there dude!"
, "Right Button", JOptionPane.INFORMATION_MESSAGE);
}
else if (ae.getSource() == dontClickButton)
{
JOptionPane.showMessageDialog(null, "I told you not to click me!"
, "Wrong Button", JOptionPane.PLAIN_MESSAGE);
}
}
};
clickButton.addActionListener(action);
dontClickButton.addActionListener(action);
add(clickButton);
add(dontClickButton);
}
}
class Window2 extends JPanel implements ActionListener
{
/*
* Here this is our second Card of CardLayout, which will
* be added to the contentPane object of JPanel, which
* has the LayoutManager set to CardLayout.
* This card consists of a JLabel and a JTextField
* with GridLayout.
*/
private JTextField textField;
public Window2()
{
init();
}
private void init()
{
setLayout(new GridLayout(1, 2));
JLabel userLabel = new JLabel("Your Name : ");
textField = new JTextField();
textField.addActionListener(this);
add(userLabel);
add(textField);
}
public void actionPerformed(ActionEvent e)
{
if (textField.getDocument().getLength() > 0)
JOptionPane.showMessageDialog(null, "Your Name is : " + textField.getText()
, "User\'s Name : ", JOptionPane.QUESTION_MESSAGE);
}
}
class Window3 extends JPanel
{
/*
* Here this is our third Card of CardLayout, which will
* be added to the contentPane object of JPanel, which
* has the LayoutManager set to CardLayout.
* This card consists of Two JLabels and two JCheckBox
* with GridLayout.
*/
private ActionListener state;
public Window3()
{
init();
}
public void init()
{
setLayout(new GridLayout(2, 2));
JLabel maleLabel = new JLabel("MALE", JLabel.CENTER);
final JCheckBox maleBox = new JCheckBox();
JLabel femaleLabel = new JLabel("FEMALE", JLabel.CENTER);
final JCheckBox femaleBox = new JCheckBox();
state = new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
if (maleBox == (JCheckBox) ae.getSource())
{
femaleBox.setSelected(false);
JOptionPane.showMessageDialog(null, "Congrats you are a Male"
, "Gender : ", JOptionPane.INFORMATION_MESSAGE);
}
else if (femaleBox == (JCheckBox) ae.getSource())
{
maleBox.setSelected(false);
JOptionPane.showMessageDialog(null, "Congrats you are a Female"
, "Gender : ", JOptionPane.INFORMATION_MESSAGE);
}
}
};
maleBox.addActionListener(state);
femaleBox.addActionListener(state);
add(maleLabel);
add(maleBox);
add(femaleLabel);
add(femaleBox);
}
}
этот пример (на этом форуме) вы можете использовать 3-5 раз за один день +1 – mKorbel
@mKorbel: Слишком верно, я только что понял, я опубликовал этот код раз где-то раньше. Я читал что-то, и вдруг этот вопрос пришел, и я отправил, не подумав об этом, что ответ на эту вещь был опубликован несколько раз раньше на SO :-) –
Спасибо, что помогли! Я попытался добавить actionListener к кнопке в одной из панелей, но когда я пытаюсь получить макет панели из основной формы, он говорит, что «нестатическая переменная contentPane не может ссылаться на статический контекст». Есть идеи? – Dangerosking
- 1. Панель макета карты с неправильной панелью - Java Swing
- 2. Карты и разметка для проката автомобилей?
- 3. Схема карты, отображающая неправильную панель
- 4. Нужна «непрямоугольная панель карты карты» или «Прозрачный компонент»
- 5. Измените каталог SD-карты для одного приложения?
- 6. Измените компоновку тепловой карты.2 Рисунок
- 7. Javascript, измените цвет маркера карты google
- 8. Позиционирование объектов в макете карты Swing
- 9. Java Swing cardlayout при загрузке карты
- 10. Измените размер CardLayout в Swing
- 11. Представляем карты как карты Маркер - ЗДЕСЬ Карты
- 12. Маршрутизация карты, карты Google?
- 13. Код карты Java-карты
- 14. Карты Google Серые карты
- 15. Размер карты Java-карты
- 16. Манипулирование карты внутри карты
- 17. C++: Swaping карты карты
- 18. Использование карты, карты не меняются?
- 19. Почему моя панель не рисует карты?
- 20. Как разместить панель инструментов под фрагментом карты?
- 21. Карты Google с обновлением Панель не отображается
- 22. Как настроить панель действий Шерлока + плагин карты?
- 23. скрыть верхнюю панель встроенной карты google
- 24. Карты Google - введите тип карты в div
- 25. Оптимизация карты структуры данных карты
- 26. рефакторинг Java Карта Карты Карты
- 27. Получить ключ от карты карты
- 28. Java - Карты и Хэш-карты
- 29. Подарочные карты/дебетовой карты Активация
- 30. Handling Карты Карты в Java
Добавив ActionListener к этому JButton, который просит, чтобы CardLayout выполнял своп. Я предполагаю, что вы прочитали учебник CardLayout, и если да, то мы не можем сказать больше, чем это, учитывая скудную информацию, которую вы предоставили. Если вам нужна дополнительная помощь, подумайте о подробностях. –
Есть аналогичные вопросы в stackoverflow.com, поиск на сайте, а затем опубликовать свой вопрос, я предлагаю. http://stackoverflow.com/q/9371460/544983 – Juvanis