Как сделать кнопку назад java

Обновлено: 07.07.2024

Я хочу поставить Jbutton на конкретный координации в JFrame. Я поставил setBounds для JPanel (который я разместил на JFrame), а также setBounds для JButton. Однако они, похоже, функционируют не так, как ожидалось.

Как можно поместить JButton в координате (0, 0)?

следующая строка должна быть вызвана перед добавлением компонента

выше установит вашу панель содержимого для использования абсолютного макета. Это означает, что вам всегда придется явно устанавливать границы вашего компонента, используя setBounds метод.

В общем, я бы не рекомендовал использовать абсолютный макет.

использовать child.setLocation(0, 0) на кнопку, и parent.setLayout(null) . Вместо использования setBounds(. ) на JFrame для его размера рассмотрите использование just setSize(. ) и позволяя ОС позиционировать кадр.

определите где-нибудь запоры:

здесь contentPane - это Container объект, который содержит весь кадр:

Я надеюсь, что это поможет, отлично работает для меня .

вы должны сначала установить макет по синтаксису pnlButton.setLayout() , а затем выбрать наиболее подходящий макет, который вы хотите. Ex: pnlButton.setLayout(new FlowLayout(FlowLayout.LEADING, 5, 5)); . А затем возьмите эту JButton в JPanel.

Я понял это lol. для кнопки сделать .setBounds(0, 0, 220, 30) Этот.макет setBounds такой (тип int х, int и y, ширина инт, инт высота)

во-первых, вспомните вашу высоту размера JPanel и ширину размера, тогда наблюдайте: координаты JButton (xo, yo, длина x , длина y). Если ваше окно 800x600, вам просто нужно написать:

вам просто нужно использовать координатный промежуток для представления кнопки и знать, где заканчивается окно и где начинается окно.

Выбирая между Eclipse и Intellij IDEA выбрала второй вариант. Почему второй? Просто в Eclipse уже тыкалась, а об Intellij IDEA узнала из проекта JavaRush. Итак, перед началом работы установила Intellij IDEA 13 и jdk 1.7 JDK (Java Development Kit) - это инструмент для работы с языком Java,в котором есть компилятор, интерпретатор, отладчик и другими инструменты, включает в себя обширнейшую библиотеку классов Java.

Забыла указать самое главное - Цель работы.

Цель работы при изучении основ Java - это создать простое оконное приложение(Frame), в котором будет находиться кнопка(Button) и выполнять какое-то действие.

Перед началом работы познакомилась с существующими компонентами в Java, такими как Label, Button, Panel, TextArea.

Посмотрела как их создают, если сравнить с as3, то принцип такой же, поэтому заострять внимание не стала.

Остался один вопрос. Почему я выбрала пакет awt, а не swing? Да очень просто, когда я читала про java, то там писали про awt.

А про swing я узнала уже потом, когда писала программу, но решила, так как у них принцип работы одинаковый, то не стоит заморачиваться.

Ну да, в swing есть уже свои навороты, но о них можно будет узнать потом, если потребуется, а сейчас достаточно основ.

Запускаем среду разработки и видим следующее

Quick start

Рисунок 1- Выбор действий

Сначала можно войти в Configure - Settings - и произвести какие-нибудь настройки.

Но на мой взгляд там всё настроено и ничего менять не нужно, поэтому для новичка можно изменить только тему среды.

Для этого внизу смотрим на надпись IDE Settings и первое у меня это Appearance.

Выбираю ее и справа в окне есть выпадающий список Theme.

Меняю, на какую нужно и нажимаю внизу на кнопку OK. Среда перезагрузится и покажет выбранную мной тему.

Возвращаемся к нашим баранам, а точнее к рисунку 1. И как уже показано на картинке, выбираем пункт Создать новый проект. Открывается следующее окно

Project name

Рисунок 2 - New project

Здесь необходимо заполнить поля. Вписываю имя проекта, указываю место, куда сохранить проект и указываю, куда я установила jdk.

Своему проекту дала имя MyFrameButton. Всё заполнила и нажала OK.

Дальше у нас создается и открывается проект. Но для начала работы этого не достаточно. Теперь требуется создать свой первый класс.

java проект

Рисунок 3 - Внешний вид проекта

На рисунке можно увидеть класс FirstProgram. Этот класс был создан мной для работы. Как я это сделала?

Да очень просто. Выбрала папочку src, это видно на рисунке. Открыла контекстное меню и выполнила следующее действие: New - Java Class.

Программа потребовала с меня имя класса, вот я и написала FirstProgram, затем нажала OK и получила поле для работы.

Ну вот, пришло время и покодить.

Кодирование

В созданный класс первым делом в самом вверху написала

Решила в конце указать (* - всё), так как еще не знаю, что мне понадобится от туда.

При кодировании рядом с моей строчкой появились следующие. Я их не писала, они сами вписались.

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

Так же отмечу, что при создании класса автоматически появилась следующая строчка

public class FirstProgram<>

Я ее немножко дополнила до такой строки

public class FirstProgram extends Frame

public - это модификатор доступности. Так как это имя класса с которым я работаю, то он должен быть у меня доступным (общественным).

После имени класса добавила слово

extends - что означает унаследовать. Мой класс будет наследником класса Frame. На основе этого класса, я буду создавать оконное приложение.

Итак, в буквальном смысле, это звучит так: Общественный класс FirstProgram является потомком класса Frame, что значит, имеет доступ к его свойствам и методам.

При создании программы обратила внимание, что конструктор класса не создается автоматически, отличии от AS3.

Поэтому прописала конструктор класса.

Отмечу, что это конструктор класса, поэтому у него такое же имя как и у класса. Ну и модификатор такой же.

После конструктора добавила статическую точку входа программы.

public static void main(String args[])<>

Как я прочитала, эта точка для запуска программы. А статическая, потому что она одна должна быть во всём проекте.

Модификатор public для того, что бы она была доступна всем в проекте.

Настройка окна приложения

В as3 первым делом вызывали предка, а потом проводили все остальные действия. В Java оказывается тот же принцип и вызывается так же.

Итак, в конструкторе первым делом запишем такие строчки

// вызываем предка, в данном случае Frame и указываем какое имя заголовка будет
setSize(200, 200);

// что бы окно не появлялось маленьким, устанавливаем нужный нам размер.

вид окна

рисунок 4 - Внешний вид окна без параметров

Пора уже определиться с тем, что у нас будет на форме.

Внешний вид

В нижней части экрана располагается кнопка Button, при нажатии на которую будет происходить какое-то действие.

Самое простое действие - это инкремент, т.е увеличение числа на 1.

private int countClick=0;

// переменная счетчик, устанавливаю начальное значение 0
private Button myButton;

// переменная для Кнопки
private Label myText;

// переменная для Текста

В конструкторе класса создаем объекты

myButton = new Button("Hello");

// создаем Кнопку с надписью на ней Hello
myText = new Label("Hello World "+countClick);

// создаем текстовое поле с надписью Hello World и добавляем к нему отображение счетчика

Также нужно учесть расположение объектов на форме. Для этого добавляем следующий код:

// Label будет расположен вверху, что значит на Северной части формы
add(myButton, BorderLayout.SOUTH);

// Button будет расположен внизу, значит на Южной части формы

Но что же будет, если я не напишу расположение. Прикинем на примере myText. Закомментируем его, но оставим для myButton.

В результате я увижу такую форму.

потерялся Label

рисунок 5 - Без Label

Итак, мы видим кнопку с надписью, но текстового поля с надписью на форме нет. Вот так будет выглядеть приложение, если забыть про расположение.

Событие Кнопки

Подходим постепенно к завершению. Как и AS3 оказывается Java тоже использует Слушателя для создания события.

Однако есть отличия. В AS3 я использовала addEventListener, а тут addActionListener.

Итак, события нужно для кнопки, поэтому вешать слушателя нужно кнопки.

Для этого я пишу имя объекта кнопки, ставлю точку и выбираю из выпадающего списка событие слушателя.

Таким образом у меня получается вот так.

Ну вот, в AS3 я прописывала свое название события и константу события, а в Java нужно написать создание нового события, т.е new ActionListener.

Выглядит это так

Как только я это написала, то увидела, что была автоматически создана следующая строка.

Отмечу еще раз, я ее не писала, она САМА автоматически появилась после моей строчки.

@Override
public void actionPerformed(ActionEvent e)

Итак, я вижу, что мне автоматически подготовили место для работы. Поэтому внутри процедуры я впишу следующий свой код.

// увеличиваю переменную на 1
myText.setText("Hello World "+countClick);

// обновляю текст в Label. Решила оставить текст без изменения, но могла бы вместо Hello World написать что-то другое.Так что обновляется только счетчик.
>

// закрываю new ActionListener
);

// закрываю скобку события Слушателя

Ну вот и всё. Код в классе FirstProgram закончился. Осталось прописать код для запуска созданного класса.

Кодируем в Main

FirstProgram myProgram = new FirstProgram();

// создаем объект myProgram своего созданного класса FirstProgram
myProgram.setVisible(true);

// устанавливаем видимость объекта.

В принципе этого достаточно. Однако, я обратила внимание, при работе с приложением я могу окно свернуть, развернуть, но не могу его закрыть.

Оказывается этот функционал подключается отдельно. Так как я всё же хочу закрывать свое окно, то решила подключить и эту функцию .

Закрыть окно

Для работы с меню окна используется слушатель window, а за закрытие отвечает адаптер.

Прочитала, что событие WindowClosing отвечает за закрытие окна на крестик. А чтобы окно закрывалось используют команду dispose().

Соединив всю информацию вместе, получила следующий код:

// так как действие должно быть с окном, то вешаем событие на созданный объект.

Принцип работы тот же, что и был, выбираю, прописываю new WindowAdapter() и появляется внизу текст события
@Override
public void windowClosing(WindowEvent e) super.windowClosing(e);

// этот текст был создан автоматически. Я вижу, что вызывается родитель с методом Закрыть окно,

в качестве аргумента отправляют Событие(event), с которым нужно дальше работать для реализации метода.

Следуя созданной для меня записи, я написала следующий код
e.getWindow().dispose();

// использую полученное событие, указываю, что мне нужно окно этого события, и указываю, что я хочу с ним сделать, а точнее уничтожить или освободить.
>
>
);

У меня есть приложение, которое считает счет в баскетбольном матче. Есть три кнопки для каждой команды, чтобы увеличить счет (+3, +2, штрафной бросок).

Я хочу создать кнопку для возврата в случае, если пользователь нажал кнопку для ошибки. Без создания трех отдельных кнопок для каждой оценки (+3,+2,+1). Но я не знаю, как преобразовать это в коде Java.

Что-то вроде: Score=score-lastNumberAdded. Извините за мой английский. Это код:

XML

ДЖАВА

2 ответа

Отменить проблемы, просить Stack для использования, так как это LIFO) и эффективная структура данных. Это означает, что в вашем случае, каждый раз, когда добавляется новый счет, он будет сидеть на вершине. Счет до этого будет сидеть чуть ниже и так далее и тому подобное. Поэтому, когда вы начинаете отменять, вы просто pop() от верхнего элемента вычтите его из оценки и повторно отобразите оценку.

Поскольку стек невероятно прост в реализации и вы можете добавить пару незначительных модификаций для помощи в вашей программе, я считаю, что это один из тех случаев, когда вы берете на себя ответственность за создание собственного облегченного ScoreStack ; вот так:

Благодаря этому вы сможете отслеживать постоянно меняющиеся оценки, предоставляя простые средства для получения текущей оценки в String форматировать, и делать все это с относительной легкостью и эффективностью. Конечно, это немного меняет ваш дизайн, так что вот пример.

несвязанный Кроме того, у вас есть ряд улучшений, которые вы могли бы рассмотреть. Это может быть признаком того, что дизайн может быть лучше, если вы предоставляете те же функциональные возможности в методах, которые отличаются только сигнатурой. Например, displayForTeamA() и его аналог для TeamB может быть displayScore(int id, String score) ; вот так:

и называется как:

Это верно для всех специфичных для вашей команды методов. То есть, приложив немного усилий к дизайну, вы сможете добиться более чистого результата.

У меня уже есть этот код, но он не работает. Я также не понимаю, как я могу создать три разных ActionListener'а.

2 ответа

У вас есть несколько вариантов:

Создайте ActionListener для каждой кнопки, это можно сделать с помощью внешнего, внутреннего или анонимного класса, это означает, что вы предоставляете автономную единицу работы для каждой кнопки, которая связана только с этой кнопкой.

Вы также можете воспользоваться API Action по тем же причинам. Дополнительные сведения см. В Как использовать действия.

Независимо от того, какой вариант вы используете, присмотритесь к Как написать слушателей действий и Как использовать кнопки, флажки и переключатели для получения дополнительных сведений.

Независимо от того, какой вариант вы используете, присмотритесь к Как написать слушателей действий и Как использовать кнопки, флажки и переключатели для получения дополнительных сведений.

Теперь, когда вы выполнили свой код, у вас есть NullPointerException , потому что panel есть null в контексте ActionListener . Это связано с тем, что вы затеняет переменную (объявляя ее дважды)

Итак, вместо этого вы можете использовать анонимный класс для каждой кнопки .

Следующая проблема, с которой вы столкнетесь, - это NumberFormatException , потому что вы вы пытаетесь преобразовать пустой String в double , потому что в текстовом поле еще ничего нет .

Если вы хотите создать три разных ActionListener, вы можете создать три внутренних класса и реализовать ActionListener для каждого класса. и поместите экземпляр класса в addActionListener() .

Читайте также: