- Переключение между собой n форм
- Решение
- Переход между формами
- Somethings
- Обработка нажатия кнопки
- StartActivity.java
- Добавление активности
- run.xml
- RunActivity.java
- Переход на другую активность
- StartActivity.java
- Intent
- Передача данных между активностями
- RunActivity.java
- StartActivity.java
- RunActivity.java
- Заключение
Переключение между собой n форм
Добрый день.
Есть в приложении несколько форм, количество не важно. они между собою переключаются. одна форма вызывает нажатием на кнопку одну любую другую. формы одинаковы.
Я предполагаю это сделать так —
1. в main просто создаем одну первую форму, через конструктор.
2. отдельным файлом конструктор для создания новой формы.
2.1. в нем же метод для переключения формы. новая открывается и старая закрывается.
3. ну и уже в каждой форме свои примочки и кнопочка для вызова другой формы.
Переключение между scene
Помогите, как сделать так чтобы при нажатии на кнопку или menuitem метод stats успешно выполнялся.
Переключение между окнами
Добрый вечер. Из основного окна открываю второстепенное и скрываю основное: private class.
Переключение между (окнами) классами
В интернете очень много информации по переключению между визуальными окнами (кажется это называется.
Переключение между JPanel (вход, регистрация и другие панели)
хочу создать фрейм приложения где переключаются панели входа, регистрации и так далее, но.
Сообщение было отмечено Urself как решение
Решение
Если вам не надо потом будет ни возвращаться, ни передавать данные на старую форму, то на старой форме по нажатию на кнопку
Form2 form2 = new Form2(); form2.setVisible(true) //это если у вас в конструкторе не задана видимость. В противном случае можно обойтись только первой строчкой)
После чего вызываете метод закрытия первой формы: form1.dispose();
То есть вместе все будет выглядеть так:
Form2 form2 = new Form2(); form2.setVisible(true); form1.dispose();
Переход между формами
Всем привет. Я еще новичок в Яве. Изучаю формы. Написал программку работает хорошо. Прощу посмотреть Вас правильно ли я делаю или нет. В Проекте существует 3 класса (Main, OneForm, SecondForm).
Main:
public static void main(String[] args) throws IOException { OneForm oneForm = new OneForm(); oneForm.start(); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
public void run() { //Создадим окно и установим заголовок final JFrame jFrame = new JFrame("OneForm"); //Создадим панель JPanel panel = new JPanel(null); //Создадим кнопки JButton twoButton = new JButton("TwoForm"); //sizes twoButton.setBounds(20,20,200,100); twoButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { SecondForm secondForm = new SecondForm(); secondForm.start(); jFrame.dispose(); } }); panel.add(twoButton); panel.setBackground(Color.WHITE); //Добавим панель в окно jFrame.add(panel); jFrame.setSize(1024,768); jFrame.setVisible(true); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
public void run() { //Создадим окно и установим заголовок final JFrame jFrame = new JFrame("SecondForm"); //Создадим панель JPanel panel = new JPanel(null); //Создадим кнопки JButton oneButton = new JButton("OneForm"); //sizes oneButton.setBounds(20,20,200,100); oneButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { OneForm oneForm = new OneForm(); oneForm.start(); jFrame.dispose(); } }); panel.add(oneButton); panel.setBackground(Color.WHITE); //Добавим панель в окно jFrame.add(panel); jFrame.setSize(1024,768); jFrame.setVisible(true); }
Когда я находясь на OneForm нажимаю на кнопку TwoButton — переходит на SecondForm все отлично. НО сначала закрывается OneForm и уж потом открывается SecondForm. Не успевает создастся вторая как первая уже закроется. Не красиво получается как-то. Поэтому подумал, может я совсем не правильно делаю эти переходы?
Спасибо за внимание.
Somethings
Итак, продолжим. В этой части мы добавим в проект ещё одну форму и будем открывать её по нажатию кнопки Run . Также сделаем так, чтобы параметры, которые были введены в первой форме, передавались во вторую (они там ещё пригодятся). Однако, ничего страшного мы пока с ними делать не будем, а просто напишем «Введены такие-то числа»
Обработка нажатия кнопки
StartActivity.java
package demo.android.life; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class StartActivity extends Activity implements OnClickListener Button mButton; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); mButton = (Button) findViewById(R.id.run); mButton.setOnClickListener(this); > public void onClick(View v) Toast.makeText(this, "It works", Toast.LENGTH_SHORT).show(); > >
Здесь выделены добавленные строки. Итак, мы сделали форму слушателем события нажатия на кнопку (имплементировав OnClickListener ), и подписались на это событие для кнопки mButton (с помощью setOnClickListener ). Для того, чтобы проверить, что всё правильно, в методе, который обрабатывает событие, показываем оповещение (Toast). Запускаем — работает.
Добавление активности
Для того, чтобы создать в приложении форму, необходимо создать два файла — XML-разметку формы( run.xml ) и Java-класс формы ( RunActivity.java ).
Разметку сделаем простейшую:
run.xml
?xml version="1.0" encoding="utf-8"?> xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> android:id="@+id/message" android:layout_width="fill_parent" android:layout_height="fill_parent" /> >
RunActivity.java
package demo.android.life; import android.app.Activity; import android.os.Bundle; public class RunActivity extends Activity @Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.run); > >
Кроме того, нужно упомянуть о новой форме в AndroidManifest.xml . Для этого в раздел application добавляем следующее:
android:name="RunActivity">activity>
Кстати, в новых версиях ADT можно добавлять активности не руками в XML, а с помощью какого-никакого графического интерфейса во вкладке Application —> Application Nodes.
Переход на другую активность
Нам хочется, чтобы это активность RunActivity появлялась после нажатия кнопки Run окна StartActivity . Пишем в обработчике этой кнопки следующее:
StartActivity.java
public void onClick(View v) Intent intent = new Intent(); intent.setClass(this, RunActivity.class); startActivity(intent); finish(); >
Intent
- action — функция, которую надо выполнить. Задается в виде константы: ACTION_VIEW , ACTION_DIAL и т.д.
- data — аргумент этой функции, записанный в виде URI
Передача данных между активностями
Итак, RunActivity появляется, но там ничего нет. Рассмотрим, каким образом можно передать параметры, введенные в StartActivity , в активность RunActivity .
У класса Intent , помимо основных атрибутов, есть ещё и второстепенные. В частности, есть такой атрибут extras , где в виде хеша ( Bundle ) хранятся любые дополнительные параметры. Им-то мы и воспользуемся. Итак, добавим в класс RunActivity.java следующие константы (ключи хеша):
RunActivity.java
public static final String EXT_COLS = "cols"; public static final String EXT_ROWS = "rows"; public static final String EXT_CELLS = "cells";
StartActivity.java
public void onClick(View v) EditText rowsEditor = (EditText)findViewById(R.id.rows_count); EditText colsEditor = (EditText)findViewById(R.id.columns_count); EditText cellsEditor = (EditText)findViewById(R.id.cells_count); int cols = Integer.parseInt(colsEditor.getText().toString()); int rows = Integer.parseInt(rowsEditor.getText().toString()); int cells = Integer.parseInt(cellsEditor.getText().toString()); Intent intent = new Intent(); intent.setClass(this, RunActivity.class); intent.putExtra(RunActivity.EXT_COLS, cols); intent.putExtra(RunActivity.EXT_ROWS, rows); intent.putExtra(RunActivity.EXT_CELLS, cells); startActivity(intent); finish(); >
Итак, мы передали в наш Intent дополнительные параметры. Теперь мы получим их в RunActivity в методе onCreate :
RunActivity.java
public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.run); Bundle extras = getIntent().getExtras(); int cols = extras.getInt(EXT_COLS); int rows = extras.getInt(EXT_ROWS); int cells = extras.getInt(EXT_CELLS); TextView message = (TextView)findViewById(R.id.message); message.setText("Rows: " + rows + "\nColumns: " + cols + "\nCells: " + cells); >
Заключение
Итак, мы добавили в наше приложение ещё одну форму, создали переход на неё и передали параметры из первой формы.
Исходники примера