【发布时间】:2019-11-23 12:39:27
【问题描述】:
我正在努力制作一个需要执行以下操作的小程序:
- 右键单击面板,单击“添加”选项。它需要在 JLabel ArrayList 中动态添加 JLabels。
- 同时将 JLabel 文本存储在字符串的 ArrayList 中。
- 打印该 arrayList 以测试它是否成功地将文本存储在数组中。
- 稍后我会以某种方式进一步保存该文本。目前还不是问题。
我被困住了,因为我似乎不知道如何将该文本从一个数组传输到另一个数组。
那该怎么做?
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Arrays;
import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JTextField;
import javax.swing.MenuElement;
public class A {
JFrame frame;
Toolkit toolkit;
JPopupMenu quickMenu;
JTextField field1;
JPanel panel;
ArrayList<JLabel> labelList;
ArrayList<String> stringArray;
String texts;
JLabel label1, label2, label3;
ArrayList<JTextField> fieldList;
int count;
A() {
frame = new JFrame("A class");
panel = new JPanel();
panel.setLayout(new GridLayout(2, 3, 5, 5));
JLabel title1 = new JLabel("Title 1");
panel.add(title1);
setDimm(frame);
quickMenu = new JPopupMenu();
JMenuItem addRow = new JMenuItem("Add row");
JMenuItem removeRow = new JMenuItem("Remove row");
quickMenu.add(addRow);
quickMenu.add(removeRow);
panel.add(quickMenu);
panel.addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent e) {
if (e.getButton() == e.BUTTON3) {
quickMenu.show(e.getComponent(), e.getX(), e.getY());
}
}
});
labelList = new <JLabel>ArrayList();
// ADD ROWS
count = 0;
stringArray = new ArrayList();
addRow.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Starting count is: " + count); // check if
// count
JLabel label = new JLabel ("" + count); // starts
// correctly
labelList.add(label); // adds new
// JLabels in
// the labelList
// array
// I suspect the problem is here underneath, not sure how to
// first get the texts inside the arraylist of JLabels and then
// transfer this text to the array of Strings that I want to
// print.
for (int i = 0; i < labelList.size(); i++) {
stringArray.add(labelList.get(i).getText());
}
panel.add(labelList.get(count));
panel.revalidate();
panel.repaint();
count++;
System.out.println("After Click count is: " + count);
System.out.println("Size of JLabel Array labelList is: " + labelList.size());
System.out.println("Size of String Array stringArray is: " + stringArray.size());
System.out.print("The content of the String ArrayList is: " + stringArray);
System.out.println();
System.out.println();
}
});
removeRow.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev)
{
/*
* panel.remove(labelList.size() - 1); // Will it delete the
* last JLabel from the panel?
* labelList.remove(labelList.size()-1);
*
*
* panel.revalidate(); panel.repaint(); count--;
*/
System.out.println(count + " and does nothing yet");
}
});
frame.add(panel);
// panel.add(button);
frame.setVisible(true);
}
void setDimm(JFrame frame) {
this.frame = frame;
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.getContentPane().setBackground(Color.gray);
frame.setSize(800, 600);
toolkit = frame.getToolkit();
Dimension size = toolkit.getScreenSize();
frame.setLocation((size.width - frame.getWidth()) / 2, (size.height - frame.getHeight()) / 2);
}
public static void main(String[] args) {
new A();
}
}
【问题讨论】:
-
你得到了什么错误/异常?
-
没有错误。它只是过度迭代第二个数组。起始计数为:2 点击后计数为:3 JLabel Array labelList 的大小为:3 String Array stringArray 的大小为:6 ArrayList 为:[0, 0, 1, 0, 1, 2]
-
从您发布的代码中:我怀疑问题出在下面您的怀疑是正确的。根据您发布的代码,每次选择 Add row 菜单选项时,都会向
labelList添加一个新的JLabel,然后添加 ALL 的文本标签到stringArray。只需将新标签的文本添加到stringArray。不需要循环。 -
哈哈。杰出的。有效。谢谢。如果需要帮助,我会更新代码以显示给其他人
标签: java arrays string swing jlabel