#java
#java
Вопрос:
Ничего не происходит, когда я нажимаю на кнопку. Вот код.
Как я могу понять проблему? Я сделал это быстро, чтобы возиться с изменением цвета фонов jpanel, но затем прослушиватель действий не работал, когда я тестировал его с сообщением.
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class Changcolorbtns extends JFrame implements ActionListener{
JLabel lbl;
JPanel p1,p2,p3,p4;
JButton btn1,btn2,btn3,btn4;
public Changcolorbtns() {
//JFrame
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setSize(500,400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(null);
// declaring
JButton btn1 = new JButton("Red");
JButton btn2 = new JButton("Blue");
JButton btn3 = new JButton("Black");
JButton btn4 = new JButton("Green");
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();
JPanel p4 = new JPanel();
JLabel lbl = new JLabel("hit me");
//settingn location and size
lbl.setBounds(60,60,60,60);
p1.setBounds(0,0,250,250);
p2.setBounds(0,250,250,250);
p3.setBounds(250,0,250,250);
p4.setBounds(250,250,250,250);
btn1.setBounds(50,50,100,100);
btn1.setVisible(true);
btn2.setBounds(250,50,100,100);
btn3.setBounds(50,250,100,100);
btn4.setBounds(250,250,100,100);
//adding 2 jpane
p1.add(btn1);
p2.add(btn2);
p3.add(btn3);
p4.add(btn4);
//setting jpanel color
p1.setBackground(Color.RED);
p2.setBackground(Color.RED);
p3.setBackground(Color.RED);
p4.setBackground(Color.RED);
//adding to jframe
add(p1);
add(p2);
add(p3);
add(p4);
//adding action listeners
btn1.addActionListener(this);
//setting visible
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e){
if(e.getSource()==btn1){
JOptionPane.showMessageDialog(null, "hi");
}
}
public static void main(String[] args) {
new Changcolorbtns();
}
}
Комментарии:
1. Заменить
JButton btn1 = new JButton("Red");
наthis.btn1 = new JButton("Red");
. Вы затеняете переменную экземпляра (используемую в методе actionPerformed) локальной переменной с тем же именем.2. Спасибо, теперь я вижу, что я сделал не так!
3. Помимо ошибки, есть ли у вас какие-либо советы, например, по моему коду, если я должен прокомментировать больше очистки кода или какие-либо ненужные строки, которые я кодирую?
4. Вы должны начать с отступа и выбрать гораздо лучшие имена. RedButton намного понятнее, чем btn1.
5. хорошо, в то время, когда я создавал все эти имена btn1, p1 и lbl, я просто экспериментировал с прослушивателем действий, но я сделаю отступ, спасибо.