#java #swing #jpanel #jbutton #actionlistener
#java #swing #jpanel #jbutton #actionlistener
Вопрос:
Когда я нажимаю кнопку с надписью «один», мое всплывающее окно зависает, и я думаю, это потому, что я пытаюсь поместить кнопку с прослушивателем действий в прослушиватель действий другой кнопки. Возможно ли это?
//code...
one = new JButton("Customize Race");
one.setBounds(30,200,200,75);
one.addActionListener(new ActionListener(){
@Override
public void actionPerformed( ActionEvent e ) {
one.setVisible(false);
Boolean pic = true;
String Player1 = "Player1";
while (pic == true)
{
p1 = new JButton(Player1);
p1.setBounds(50, 50, 200, 100);
p1.addActionListener(new ActionListener(){
@Override
public void actionPerformed( ActionEvent e ) {
// code that will pull up menu to
customize string value of Player1
}
});
next1 = new JButton("Next =>");
next1.setBounds(50, 375, 450, 50);
next1.addActionListener(new ActionListener(){
@Override
public void actionPerformed( ActionEvent e ) {
Boolean pic = false;
}
});
panel.add(p1);
panel.add(next1);
}
p1.setVisible(false);
}
});
panel.add(one);
frame.setVisible(true);
Ответ №1:
Можете ли вы поместить прослушиватель действий в прослушиватель действий?
Да, вы можете создать компонент в своем ActionListener и добавить ActionListener к новому компоненту.
Проблема не в этом.
мое всплывающее окно зависает,
while (pic == true)
Проблема в том, что у вас есть цикл while, который продолжает выполняться.
Ваш ActionListener постоянно создает компоненты и добавляет их во фрейм, и цикл никогда не заканчивается.
Избавьтесь от цикла while!!!
Кроме того, когда вы добавляете компоненты в видимый фрейм, код должен быть:
panel.add(....);
panel.revalidate();
panel.repaint();
Revalidate() вызывает диспетчер компоновки, чтобы компонент можно было правильно расположить, а repaint() просто проверяет, что все компоненты перерисованы.