Java App - 添加,删除,重新排序JButton的元素

Ali*_*oud 6 java user-interface swing jpanel jbutton

我正在开发一个Java应用程序.

我用MockupScreens创建了这个界面.请看这些照片.

在此输入图像描述

在此输入图像描述

第一次,只有一个元素,用户必须输入信息(标题和描述),然后他开始按需要添加元素.他可以随时编辑元素信息.他也可以删除或更改这些元素的顺序......

如何创建像图片一样的东西?????

提前致谢.最好的祝福,

阿里.

我在Java Swing中了解这些部分.我的问题是如何动态插入这个按钮块. 在此输入图像描述

我明白了,我必须把JButton放在JPanel上,然后通过添加,删除和重新排序来操作JPanel ......所以Grid Layout将有效地在每个面板之后添加每个面板,但是考虑重新排序顺序会很困难...

请给我任何建议.:)


搜索后,我得到一个想法:

在此输入图像描述

让我们将这些JButton放在一个名为btnsUnit的JPanel中,然后通过添加,删除和重新排序来操作它......所以GridLayout可以高效地在每个JPanel之后添加每个JPanel.

这就是为什么我创建了一个新的JPanel,它将包含一个未知数量的ListbtnsUnit JPanel,我将10固定为最大数字.

当你回复我时,我正在做这些步骤.我没有到达在ListbtnsUnit JPanel中添加btnsUnit 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();
        }
    });
}
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

请帮您解决这个问题.我只需要第一次继续推进.

cam*_*ckr 2

但考虑重新排序会很难......

在按钮的 ActionListener 中:

  1. 使用 getSource() 方法获取被单击的按钮
  2. 使用按钮的 getParent() 方法查找按钮所属的面板
  3. 使用按钮面板的 getParent() 方法查找其父面板
  4. 使用 getComponents 方法获取所有按钮面板的数组。然后循环遍历数组以查找您要搜索的面板的索引。
  5. 一旦找到增加或减少索引的索引,您就可以将面板添加回新索引处的父面板。
  6. 然后您 revalidate() 和 repaint() 父面板以在新位置显示面板。