как мне заставить кнопку (я ей присвоил 0) в JAVA ActionListner(ом) в поле JTextField водить цифру 0 несколько раз а не один наживаю вторую JBatton (допустим 1) они тоже срабатывает один раз или если по очереди меняют друг друга а надо так 111111 или 00000 или вообще 10101011100
Кирилл
14 уровень
ActionListener
Обсуждается
Комментарии (23)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Кирилл
5 января, 18:17
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class ISnovaMnogoKoda extends JFrame {
JButton b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16;
JTextField t1;
JLabel l1;
int p=0,k=1;
String a,b;
Slushatel zitka=new Slushatel();
public ISnovaMnogoKoda(String s){
super(s);
setLayout(new FlowLayout());
b1=new JButton("0");
b2=new JButton("1");
b3=new JButton("2");
b4=new JButton("3");
b5=new JButton("4");
b6=new JButton("5");
b7=new JButton("6");
b8=new JButton("7");
b9=new JButton("8");
b10=new JButton("9");
b11=new JButton("+");
b12=new JButton("-");
b13=new JButton("/");
b14=new JButton("*");
b15=new JButton("=");
b16=new JButton("C");
t1=new JTextField(20);
l1=new JLabel("");
add(t1);
add(l1);
add(b1);
add(b2);
add(b3);
add(b4);
add(b5);
add(b6);
add(b7);
add(b8);
add(b9);
add(b10);
add(b11);
add(b12);
add(b13);
add(b14);
add(b15);
add(b16);
b1.addActionListener(zitka);
b2.addActionListener(zitka);
}
public class Slushatel implements ActionListener{
public void actionPerformed(ActionEvent e) {
if(e.getSource()==b1){//ВОТ ЭТО выводит мне одну цифру в поле а я хочу чтоб при нажатие был не 0 а 0000000
t1.setText(""+p);
}
if(e.getSource()==b2){
t1.setText(""+k);
k=Integer.parseInt(t1.getText());
}
}
}
}
0
Денис Enterprise Java Developer
5 января, 18:00
Покажи код и объясни внятно что именно он должен делать. Listener всего лишь слушает какой-то ивент и выполняет кусок кода если это нужно. В этом куске можешь модифицировать свою text area как хочешь.
0
Кирилл
5 января, 18:18
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class ISnovaMnogoKoda extends JFrame {
JButton b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16;
JTextField t1;
JLabel l1;
int p=0,k=1;
String a,b;
Slushatel zitka=new Slushatel();
public ISnovaMnogoKoda(String s){
super(s);
setLayout(new FlowLayout());
b1=new JButton("0");
b2=new JButton("1");
b3=new JButton("2");
b4=new JButton("3");
b5=new JButton("4");
b6=new JButton("5");
b7=new JButton("6");
b8=new JButton("7");
b9=new JButton("8");
b10=new JButton("9");
b11=new JButton("+");
b12=new JButton("-");
b13=new JButton("/");
b14=new JButton("*");
b15=new JButton("=");
b16=new JButton("C");
t1=new JTextField(20);
l1=new JLabel("");
add(t1);
add(l1);
add(b1);
add(b2);
add(b3);
add(b4);
add(b5);
add(b6);
add(b7);
add(b8);
add(b9);
add(b10);
add(b11);
add(b12);
add(b13);
add(b14);
add(b15);
add(b16);
b1.addActionListener(zitka);
b2.addActionListener(zitka);
}
public class Slushatel implements ActionListener{
public void actionPerformed(ActionEvent e) {
if(e.getSource()==b1){//ВОТ ЭТО выводит мне одну цифру в поле а я хочу чтоб при нажатие был не 0 а 0000000
t1.setText(""+p);
}
if(e.getSource()==b2){
t1.setText(""+k);
k=Integer.parseInt(t1.getText());
}
}
}
}
0
Кирилл
5 января, 18:19
нажатие несколько раз
0
Кирилл
5 января, 18:21
или щелкая b1или b2 получалось 1010101001 а получается или цифра 1 или 0
0
Денис Enterprise Java Developer
5 января, 18:23
Но вообще мне кажется ты что-то странное делаешь :) Я бы разделял визуальное представление от фактических чисел.
Ну или напротив, если набираешь выражение как на взрослом калькуляторе то работать нужно со строками, в данном случае пусть каждая кнопка просто делает аппенд значения справа, и уже потом проведёшь лексический анализ, разложишь на выражения с приоритетом операций и выполнишь вычисления.
0
Кирилл
5 января, 18:30
я этого не знал СПАСИБО ( 10раз могу ввести?)ввожу я integer в текстовое поле может потом оно преобразуется обратное в общее большое число ..тут просто один умник показал как сложить два числа а теперь задайте каждой кнопки цифры набирайте с помощью них большие числа в TextField и после плюса и равно выводите результат в TextField Калькулятор Короче..ток у меня мало инфы как заставить запомнить JAVA два числа и сложить их кнопкой + и на равно вывести обратно в поле
0
Кирилл
5 января, 18:31
но СПАСИБО уже прогресс))
0
Денис Enterprise Java Developer
5 января, 18:32
Начни с чего-то по проще, тебе явно не хватает базовых знаний в Java, потому приложения с графическими интерфейсами и не тривиальной логикой, а токенизация и парсинг мат выражения вообще не тривиальная затея, короче не стоит сейчас тебе этим заниматься - наберись скила на чем-то простеньком.
Познакомься с базовым синтаксисом, что предлагает язык, переменные, операции с ними, методы, классы, объекты, простенькие алгоритмы, типа определить является ли строка палиндромом или содержат ли две строки одинаковый набор символов, ну и вот это вот все. Я вижу у тебя 13й уровень, ну так и продолжай Javarush - это отличный задачник.
0
Кирилл
5 января, 18:35
buildYourString что это ? неизвестный метод
0
Кирилл
5 января, 18:37
я и там и там пытаюсь JAVA rush мне не совсем помогает я смотрю параллельно видео и пытаюсь собрать калейдоскоп
0
Кирилл
5 января, 18:38
ааа все этот метод ниже
0
Денис Enterprise Java Developer
5 января, 18:39
buildYourString что это ? неизвестный метод
Это просто метод, который я написал, чтобы повторить некоторую строку некоторое количество раз. В частности pattern это строка которую я хочу повторить, times - количество раз для повтора.
Ты как программист можешь писать свои методы, это очень удобно и позволяет структурировать код.
Вот альтернативная реализация того же функционала:
0
Кирилл
5 января, 18:41
теперь при нажатие на b1 которое ноль он выдает десять букв p вот так в текстовом поле даже если сделал так public class Slushatel implements ActionListener{
public void actionPerformed(ActionEvent e) {
if(e.getSource()==b1){
t1.setText(buildYourString(""+p,10));
}
if(e.getSource()==b2){
t1.setText(""+k);
k=Integer.parseInt(t1.getText());
}
}
private String buildYourString(String pattern, int times) {
return pattern.repeat(times);
}
}
} 10 нулей а мне надо щёлк 0 щелк 0 а он один раз ноль ставит
0
Кирилл
5 января, 18:43
да ну вот я коряво обьясняю кнопке прослушиватель на кнопке b1 он срабатывает один раз ставит 0 один раз а я хочу при каждом нажатии
0
Кирилл
5 января, 18:44
1 раз нажал 1 нуль 3 раза нажал 3 нуля подряд 4 раза нажал появилось 4 нуля подряд
0
Денис Enterprise Java Developer
5 января, 18:51
Посмотри на пример со стрингбилдером выше.
Пусть у тебя будет какое-то поле типа StringBuilder
При нажатии любой кнопки делай в него аппенд
0
Кирилл
5 января, 18:56
StringBuilder вместо JTextField?
0
Денис Enterprise Java Developer
5 января, 19:06
Не вместо, а вместе. Что-то типа такого:
0
Кирилл
5 января, 19:57
мдаа)) я знаете JAVA отношусь как к магии но я с трудом читаю этот фолиант )) удачи пошел я огонек в руках учиться зажигать))
0
Кирилл
5 января, 19:58
кнопка массив? брррр))
private final JButton[] buttons = new JButton[16];
0
Денис Enterprise Java Developer
5 января, 20:06
Массив кнопок, скопируй просто код, запусти и поиграйся в дебаггере как оно работает. Считать оно конечно ничего не будет, но в остальном ведёт себя прилично.
Можно с кнопками сделать изящнее, через хешмапу, где ключом будет символ кнопки, а значением сама кнопка. Это удобно будет если например ты на кнопки захочешь еще какую обработку навесить, например слушать намлок, чтобы набирать выражения.
В целом я тебе потому и советовал вернуться к истокам. Не распыляйся на миллион платформ, толку с этого не будет. Добивай что-то одно, я бы добил JR - это хороший задачник. Да не просто, но тут есть и комьюнити для помощи и, что важнее, какая ни какая, а система. Целостность подачи информации. Да иногда в задачах попадаются темы которые не проходили, но они обычно освещаются через несколько лекций, это раз, а во вторых, лекции все равно идут как то структурированно, а не как любят блоггеры поверхам отовсюду нахватать.
Твоя задача понять какими инструментами ты владеешь и научиться их применять, тогда эти "фолианты" станут для тебя развлечением на пять-десять минут.
0
Кирилл
5 января, 20:34
хорошо) СПАСИБО
0