Приложение Java - добавление, удаление, изменение порядка элементов JButtons - PullRequest
6 голосов
/ 05 марта 2011

Я разрабатываю Java-приложение .

Я создал этот интерфейс с MockupScreens . Пожалуйста, посмотрите на эти картинки.

enter image description here

enter image description here

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

Как я могу создать что-то похожее на картинки ?????

Заранее спасибо. С уважением,

Али.

Я знаю эти части в Java Swing. Моя проблема заключается в том, как динамически вставить этот блок кнопок. enter image description here

У меня есть идея, я должен поместить JButtons в JPanel, а затем манипулировать JPanel, добавляя, удаляя и переопределяя ... Таким образом, Grid Layout будет эффективнее добавлять каждую панель после каждой, но подумать о переупорядочении порядка будет очень сложно ...

Любые предложения, пожалуйста. :)


После поиска у меня возникает идея:

enter image description here

Давайте поместим эти JButton в JPanel с именем btnsUnit, а затем манипулируем им, добавляя, удаляя и переопределяя ... Так что GridLayout будет эффективным для добавления каждого JPanel после каждого ..

Вот почему я создал новую JPanel, которая будет содержать неизвестное число ListbtnsUnit JPanel, я установил 10 как максимальное число.

Я просто делаю эти шаги, когда ты мне отвечаешь. Я не прибыл, чтобы добавить btnsUnit JPanel в ListbtnsUnit JPanel.

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Color;
import java.awt.GridLayout;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JTextField;


public class setupDeviceList extends JFrame {

private JPanel contentPane;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                setupDeviceList frame = new setupDeviceList();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public setupDeviceList() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 742, 335);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    final JPanel ListbtnsUnit = new JPanel();
    ListbtnsUnit.setBackground(Color.RED);
    ListbtnsUnit.setBounds(55, 56, 243, 191);
    contentPane.add(ListbtnsUnit);
    ListbtnsUnit.setLayout(new GridLayout(10, 0));

    final JButton btnAdd = new JButton("Add");
    btnAdd.setBounds(161, 11, 56, 23);
    btnAdd.setVisible(true);

    btnAdd.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {

            final JPanel btnsUnit = new JPanel();
            btnsUnit.setBounds(343, 71, 243, 147);
            contentPane.add(btnsUnit);
            btnsUnit.setBackground(Color.ORANGE);
            btnsUnit.setLayout(null);
            btnsUnit.add(btnAdd);

            ListbtnsUnit.add(btnsUnit);
            ListbtnsUnit.revalidate();
            ListbtnsUnit.repaint();
        }
    });
}
}

enter image description here

Пожалуйста, вы можете помочь мне в этом коде. Мне нужен только первый толчок, чтобы продолжить.

Ответы [ 3 ]

2 голосов
/ 05 марта 2011

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

В вашем ActionListener для кнопки:

  1. используйте метод getSource () дляполучить кнопку, на которую нажали
  2. использовать метод getParent () для кнопки, чтобы найти панель, к которой принадлежит кнопка
  3. использовать метод getParent () на панели кнопок, чтобы найти родительскую панель
  4. используйте метод getComponents, чтобы получить массив всех панелей кнопок.Затем переберите массив, чтобы найти индекс панели, которую вы ищете.
  5. как только вы найдете индекс, который вы увеличиваете или уменьшаете, вы можете добавить панель обратно в родительскую панель с новым индексом.
  6. затем вы повторно проверяете () и перерисовываете () родительскую панель, чтобы отобразить панель в новом месте.
1 голос
/ 05 марта 2011

Я думаю вы используете неправильную идиому здесь . То, что вы пытаетесь выполнить, обычно выполняется с помощью JList (прокручиваемый список элементов). Таким образом, вам нужен только один набор операций, таких как переупорядочение, добавление и удаление, рядом с JList . Операции должны выполняться для выбранного элемента в JList (в противном случае они должны быть отключены)

Ваш интерфейс может выглядеть как

enter image description here

Используемая в настоящее время идиома в основном делается на веб-страницах. Интерфейсы рабочего стола (особенно Swing) намного богаче.

Подробнее об использовании JList вы можете узнать по адресу http://download.oracle.com/javase/tutorial/uiswing/components/list.html

1 голос
/ 05 марта 2011

Хорошие изображения: -)

Вам нужны эти части, если вы хотите сделать это в Swing:

  • javax.swing.JButton (несколько кнопок)
  • javax.swing.JTextField (однострочный компонент ввода текста)
  • javax.swing.JTextArea (многострочный компонент ввода текста)
  • javax.swing.JLabel (метки дляваши поля ввода)
  • javax.swing.JPanel (контейнер для группировки нескольких компонентов, таких как строки кнопок или компоненты редактирования справа)
  • javax.swing.JFrame (окно для всех вместе)
  • javax.swing.Action (действия, выполняемые при нажатии кнопки - они также могут содержать значок и / или текст для кнопки)

Посмотрите на них, начните кодировать, а затем возвращайтесь, если у вас есть конкретные проблемы.Удачи!

...