首页 文章

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

提问于
浏览
6

我正在开发 Java application .

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

enter image description here

enter image description here

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

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

提前致谢 . 最好的祝福,

阿里 .

我在Java Swing中了解这些部分 . 我的问题是如何动态插入这个按钮块 .
enter image description here

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

请给我任何建议 . :)


搜索后,我明白了一点:

enter image description here

让我们将这些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();
        }
    });
}
}

enter image description here

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

3 回答

  • 1

    但是考虑重新订购订单会很难......

    在按钮的ActionListener中:

    • 使用getSource()方法获取单击的按钮

    • 使用按钮的getParent()方法查找按钮所属的面板

    • 使用按钮面板的getParent()方法查找其父面板

    • 使用getComponents方法获取所有按钮面板的数组 . 然后遍历数组以查找要搜索的面板的索引 .

    • 一旦找到增加的索引减少索引,则可以将面板添加回新索引的父面板 .

    • 然后重新验证()并重绘()父面板以在新位置显示面板 .

  • 2

    好的图片:-)

    如果你想在Swing中这样做,你需要这些部分:

    • javax.swing.JButton(几个按钮)

    • javax.swing.JTextField(单行文本输入组件)

    • javax.swing.JTextArea(多行文本输入组件)

    • javax.swing.JLabel(输入字段的标签)

    • javax.swing.JPanel(将多个组件组合在一起的容器,如按钮行或右侧的编辑组件)

    • javax.swing.JFrame(所有窗口)

    • javax.swing.Action(单击按钮时要执行的操作 - 它们还可以包含按钮的图标和/或文本)

    看看这些,开始编码,然后如果你有具体的问题再回来 . 祝好运!

  • 1

    我想 you are using a wrong idiom here . 您要完成的任务通常是使用JList(可滚动的项目列表)完成的 . 这样,您只需要在JList旁边进行一组操作,例如重新排序,添加和删除 . 操作应对JList中的选定项目进行操作(否则应禁用它们)

    您的界面可能看起来有点像

    enter image description here

    您目前使用的习惯用法主要在网页上完成 . 桌面UI(尤其是Swing)更丰富 .

    你可以在http://download.oracle.com/javase/tutorial/uiswing/components/list.html找到更多关于如何使用JList的信息 .

相关问题