【发布时间】:2021-09-17 16:15:37
【问题描述】:
我想在 Java 中创建一个购物清单作为 JFrame。我有一个JTextField“输入”,您可以在其中输入要添加的内容,输入将保存在String“eingabe”中,然后是JButton“按钮”,您可以在其中添加您想要的内容添加。
如果你按下JButton“按钮”,它会创建一个JLabel“标签”(带有字符串“eingabe”的值)、一个JCheckBox“盒子”和一个JButton“button2”应该是什么项目的删除按钮。
所以如果你按下JButton“button2”它应该删除添加的项目(JLabel“label”)、JCheckBox“box”和JButton“button2”。
一切正常,但如果我按下按钮 2,它只会删除最后添加的项目。我该怎么做才能将每个删除按钮链接到相关的标签、框和按钮本身?
也许使用列表或数组或类似的东西。如果是,你能解释一下如何实现它的逻辑吗?
我希望你能明白我想问什么。
这是我的代码:
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class Layer extends JFrame implements ActionListener, KeyListener{
/**
*
*/
private static final long serialVersionUID = 1L;
// Alle Konstruktoren,Variablen, Attribute oder so
private JButton button,button2;
private JTextField input;
private JLabel label;
private String eingabe;
private JPanel panel;
private JCheckBox box;
public void Fenster() {
// Wenn das X rechts oben gedrückt wird, wird das Fenster geschlossen
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
// Titel und Größe des JFrame werden gesetzt
this.setTitle("Einkaufsliste");
this.setSize(300,700);
this.setResizable(false);
// Neues Objekt von JTextField wird erstellt und alles wird direkt markiert und die Größe wird gesetzt
input = new JTextField("Hier eingeben");
input.selectAll();
input.setMaximumSize(new Dimension(200,20));
// Neues Objekt von JTextField wird erstellt, zentral ausgerichtet und ein ActionListener hinzugefügt
button = new JButton("Hinzufügen");
button.setAlignmentX(CENTER_ALIGNMENT);
button.addActionListener(this);
// Neues Objekt von JPanel wird erstellt und das BoxLayout hinzugefügt
panel = new JPanel();
panel.setLayout(new javax.swing.BoxLayout(panel, javax.swing.BoxLayout.Y_AXIS));
// Das JTextField "input" und dem JButton "button" werden dem JPanel "panel" hinzugefügt
panel.add(Box.createRigidArea(new Dimension(0,10)));
panel.add(input);
panel.add(Box.createRigidArea(new Dimension(0,10)));
panel.add(button);
panel.add(Box.createRigidArea(new Dimension(0,10)));
// Der soll einfach eine Trennlinie erstellen
panel.add(new JSeparator(SwingConstants.HORIZONTAL));
panel.add(Box.createRigidArea(new Dimension(0,10)));
//Dem JFrame "this" wird das JPanel "panel" hinzugefügt
this.add(panel);
// Dem JButton "button" wird ein KeyListener hinzugefügt
button.addKeyListener((KeyListener) this);
}
public void keyPressed(KeyEvent ke) {
if(ke.getKeyCode() == KeyEvent.VK_ENTER) {
button.doClick();
}
}
@SuppressWarnings("deprecation")
public void actionPerformed(ActionEvent e) {
//Wenn button gedrückt wird passiert das
if(e.getSource() == this.button) {
// neues Objekt von JLabel wird erstellt und panel hinzugefügt
label = new JLabel();
panel.add(label);
// neues Objekt von JButton wird erstellt und ActionListener hinzugefügt
button2 = new JButton("Löschen");
button2.addActionListener(this);
// String eingabe bekommt den Wert der im TextField input drinne ist
eingabe = input.getText();
// In Label wird der Wert des Strings eingabe gegeben und zentral ausgerichtet
label.setText(eingabe);
label.setAlignmentX(CENTER_ALIGNMENT);
// neues Objekt von JCheckBox wird erstellt und panel hinzugefügt
box = new JCheckBox();
panel.add(box);
// label,box und button2 werden zentral ausgerichtet
label.setAlignmentX(Component.CENTER_ALIGNMENT);
box.setAlignmentX(Component.CENTER_ALIGNMENT);
button2.setAlignmentX(Component.CENTER_ALIGNMENT);
// button2 wird dem Panel hinzugefügt
panel.add(button2);
}
//Wenn button2 gedrückt wird passiert das
if (e.getSource() == button2){
label.hide();
box.hide();
button2.hide();
}
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
}
【问题讨论】:
-
JList可能是您正在寻找的。见How to Use Lists。然后,您可以将您的项目添加到此列表中以显示它们。链接的教程向您展示了如何在列表中添加和删除项目。