我正在开发 Java application .
我用MockupScreens创建了这个界面 . 请看这些图片 .
第一次,只有一个元素,用户必须输入信息( Headers 和描述),然后他开始按需要添加元素 . 他可以随时编辑元素信息 . 他也可以删除或更改这些元素的顺序......
如何创建像图片一样的东西?????
提前致谢 . 最好的祝福,
阿里 .
我在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();
}
});
}
}
请帮您解决这个问题 . 我需要第一次继续推进 .
3 回答
在按钮的ActionListener中:
使用getSource()方法获取单击的按钮
使用按钮的getParent()方法查找按钮所属的面板
使用按钮面板的getParent()方法查找其父面板
使用getComponents方法获取所有按钮面板的数组 . 然后遍历数组以查找要搜索的面板的索引 .
一旦找到增加的索引减少索引,则可以将面板添加回新索引的父面板 .
然后重新验证()并重绘()父面板以在新位置显示面板 .
好的图片:-)
如果你想在Swing中这样做,你需要这些部分:
javax.swing.JButton(几个按钮)
javax.swing.JTextField(单行文本输入组件)
javax.swing.JTextArea(多行文本输入组件)
javax.swing.JLabel(输入字段的标签)
javax.swing.JPanel(将多个组件组合在一起的容器,如按钮行或右侧的编辑组件)
javax.swing.JFrame(所有窗口)
javax.swing.Action(单击按钮时要执行的操作 - 它们还可以包含按钮的图标和/或文本)
看看这些,开始编码,然后如果你有具体的问题再回来 . 祝好运!
我想 you are using a wrong idiom here . 您要完成的任务通常是使用JList(可滚动的项目列表)完成的 . 这样,您只需要在JList旁边进行一组操作,例如重新排序,添加和删除 . 操作应对JList中的选定项目进行操作(否则应禁用它们)
您的界面可能看起来有点像
您目前使用的习惯用法主要在网页上完成 . 桌面UI(尤其是Swing)更丰富 .
你可以在http://download.oracle.com/javase/tutorial/uiswing/components/list.html找到更多关于如何使用JList的信息 .