help with simple Java code!!!
![](/images/graemlins/grin.gif)
![](/images/graemlins/grin.gif)
![](/images/graemlins/grin.gif)
что-то не так?
Разбираться в долбанном Swing-е желания нет (переходи на SWT/JFace но последние строки настораживают. Что это у тебя JTextField такой короткоживущий? Формально, он даже ни с кем не связан (с родителем, например кто мог бы его уберечь от Garbage Collector-а.
ЗЫ в шестой идее прикольный УИ дизигнер
b1.addActionListener(/*что сюда писать?*/);
Пиши ананимуса:
b1.addActionListener(
new ActionListener{
public void actionPerformed(ActionEvent e) {
// Сюда и пиши
}
}
);
upd: Ты ж уже всё написал, ток out туда вставить...
ЗЫ. Русские камменты, это да....
b1.addActionListener(
new ActionListener{
public void ActionPerformed(ActionAvent e){
display.setText("1");
}
}
);
А класс Show удалил. Всё-равно ругается! Не понимаю, что такое out?
JTextField я переместил из метода CalculatorPanel выше - в класс CalculatorPanel. Мне хотелось бы понять логику, как это работает: вроде пишешь сам всё, думаешь правильно, а оно не хочет работать!
class CalculatorPanel extends JPanel {
ActionListener out = new Show;
//...
public CalculatorPanel {//...}
b1.addActionListener(ActionListener out);//вот здесь ему "ActionListener" не нравится!
}//конец класса
class Show implements ActionListener{
public void actionPerformed(ActionEvent event){
// JTextField display = new JTextField;
display.setText("1");//это я пока для 1-ой кнопки написал
}
}
В чём здесь дело?
b1.addActionListener (//пишет, что здесь нужен какой-то идентификатор
new ActionListener{
public void actionPerformed(ActionEvent e) {
display.setText("1");
}
});
}
И всё, больше ничего. Но всё-равно не работает.
Но вот code convention тебе почитать, явно, стоит.
а по теме: что такое у тебя b1?
![](/images/graemlins/smile.gif)
подозреваю, что это должна была быть кнопка, но боюсь, современные IDE ещё пока не дошли до такой степени разумности, чтобы самим код дописывать
![](/images/graemlins/wink.gif)
З.Ы.:
почитай хотя бы Брюса Эккеля - полезно будет...
Ну а теперь новый вопрос, почему это не работает:
//метод добавления блоков прослушивания
public void addAction(JButton button){
button.addActionListener (
new ActionListener{
public void actionPerformed(ActionEvent e) {
switch(getLabel(JButton button{
case "1":
display.setText("1");
break;
case "2":
display.setText("2");
break;
default:
display.setText("0");
}
}
});
з.ы.:
уверен, тебе это сам компилятор должен был сообщить
if (button.getLabel == "1"){
display.setText("1");
}
else{
display.setText("2");
}
![](/images/graemlins/crazy.gif)
во-первых, в общем случае (со строками есть фича, когда они берутся из пула констант и тогда, действительно, окажутся равны, но в данном случае это не так) нельзя сравнивать строки (да и вообще объекты) через "==" - пользуйся equals
во-вторых, предыдущий код очень странный: в обработчика событий помещают switch или if/else, когда __один и тот же__ обработчик, вешается на несколько компонент - у тебя же на все кнопки вешается новый экземпляр слушателя
в-третьих, попробуй всё-таки почитать сообщения от компилятора - подозреваю, что он ругается на display, который следовало бы сделать сделать полем класса, а не объявлять его внутри метода
//метод добавления блоков прослушивания
public void addAction(JButton button){
button.addActionListener (
new ActionListener{
public void actionPerformed(ActionEvent e) {
String input = e.getActionCommand;
if (start) {
display.setText("");
start = false; }
display.setText(display.getText + input);
}
});
он ругается на display, который следовало бы сделать сделать полем класса, а не объявлять его внутри метода
Можно просто final'ом объявить.
2автор. А ты где пишешь? Просто idea или eclipse СИЛЬНО упрощают процесс написания.
По крайней мере жавадоки сможешь читать на ура без предварительной генерации и прямо в коде
(а может даже писать
Оставить комментарий
tit1976
package calculator;import java.awt.*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.*;
class okno extends JFrame {
public okno {
setTitle("Calculator");
getContentPane.add(new CalculatorPanel;
}
public static void main(String[] args) {
okno frame = new okno;
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(500,500,250,200);
frame.show;
}
}
class CalculatorPanel extends JPanel {
//создание экземпляров JButton
public CalculatorPanel {
GridBagLayout theGridBag = new GridBagLayout;
setLayout(theGridBag);
GridBagConstraints theConstraints = new GridBagConstraints;
//увеличим все компоненты до максимального размера
theConstraints.fill = GridBagConstraints.BOTH;
//дисплей занимает всю верхнюю строку
theConstraints.gridwidth = GridBagConstraints.REMAINDER;
theConstraints.weightx = 1.0;
JTextField display = new JTextField;
theGridBag.setConstraints(display, theConstraints);
add(display);
//добавление кнопок с использованием GridBagLayout
//как сюда добавить блок прослушивания?
ActionListener out = new Show;
b1.addActionListener(/*что сюда писать?*/);
}
}
class Show implements ActionListener{
public void actionPerformed(ActionEvent e){
JTextField display = new JTextField;
display.setText("1");//это я пока для 1-ой кнопки написал
}
}