java - 用Java为自己的程序制作交互式GUI
问题描述
首先——我不确定我是否正确地提出了这个问题(我是 Java 新手,也是使用 GUI 制作程序的新手)。
这是下面的事情,我正在尝试做。我有一个带有几个类似参数的窗口(数字只是为了区分行,它只是非常简化的示例,我的 GUI 应该是什么): 初始窗口
然后,通过单击“+”按钮,我想添加一个新行,如下所示: 添加第 35 行
也应该可以删除行,如下所示:Line 30 was deleted,按“-”-按钮。
正如我在开头所写的那样,有可能存在这样的问题,但我找不到任何东西(可能是因为我现在没有关键字,或者我正在寻找错误的关键字)。
这样的窗口怎么做?我唯一的想法是在每个 +/- 之后绘制一个新窗口。
加法:代码(在更改行数的部分不起作用)。
import javax.swing.*;
import java.awt.event.*;
public class Test extends JFrame {
public Test() {
setSize(200, 600);
JButton plusButton[] = new JButton[100];
JButton minusButton[] = new JButton[100];
JTextField fields[] = new JTextField[100];
JPanel panel1 = new JPanel();
for (int i=0; i<plusButton.length; i++) {
plusButton[i]=new JButton("+");
minusButton[i]=new JButton("-");
fields[i] = new JTextField("Text "+ i);
}
for (int i=1; i<4; i++) {
panel1.add(plusButton[i*10]);
plusButton[i*10].setActionCommand("add after " +String.valueOf(i));
panel1.add(minusButton[i*10]);
minusButton[i*10].setActionCommand("remove " +String.valueOf(i));
panel1.add(fields[i*10]);
}
panel1.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
this.getContentPane().add(panel1);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e) {
for (int i=0; i<100; i++) {
String stand1 = "add after "+String.valueOf(i);
String stand2 = "remove "+String.valueOf(i);
if (stand1.equals(e.getActionCommand())) {
//add "row" of elements
panel1.add(plusButton[i]);
plusButton[i+1].setActionCommand("add");
panel1.add(minusButton[i+1]);
minusButton[i+1].setActionCommand("remove");
panel1.add(fields[i+1]);
} else if (stand2.equals(e.getActionCommand())) {
//delete "row" of elements
}
}
}
public static void main(String[] args) {
Test a = new Test();
}
}
问题很明显——当我想在按钮 20 之后添加 2 行(我认为这是正确的定义)按钮时,数字会增加一倍。作为一种解决方案,我在这里看到为每个新行创建一个新面板。但这对我来说是错误的。
PS 不幸的是,我没有时间结束这个话题或发布一个工作示例。我实际上找到了某种解决方案,从这里的问题开始,关于 Stack Overflow: Adding JButton to JTable as cell。因此,如果有人会寻找这样的主题,它应该听起来像“jTable 中的 jButton”。
解决方案
Java 有多种 GUI 框架。首先决定你要使用哪个。
至于您的特定查询
+
向and添加功能,-
这样它将创建一个字段对象的实例(与您调用它们时的参数一致)或销毁该对象的特定实例。
+
单击 -> 在连续行上创建新对象并增加以下字段的指针计数(?)。
-
单击 -> 为特定对象调用析构函数并减少以下字段的指针计数。
推荐阅读
- pandas - 对与列链接的熊猫数据框中每个单元格的行进行排序
- aem - 在 locahost 中剥离的 AEM 锚标记
- kubernetes - Go Quorum Kubernetes 设置节点副本和负载平衡
- python - 如何使用特定函数仅替换列中的 NaN 值?
- python - 使用 xlsxwriter 为单个单元格着色
- c - FLT_HAS_SUBNORM 为 0:执行 fpclassify() 与手动构造的次正规导致 UB 还是导致 WDB 返回 FP_SUBNORMAL?
- visual-studio-2013 - 如何使用 .net Framework 4.5 使用 netstandard2?
- r - 尝试编写函数时“包装期间出错:必须使用有效的下标向量对行进行子集化”
- vb.net - 解析表单控件
- vert.x - vertx 和车把如何注册自定义助手