我想在Java中以JFrame的形式創建一個雜貨店清單。我有一個JTextField"輸入",在這里您可以輸入您想添加的內容,輸入將被保存在一個String"eingabe "中,然后是一個JButton"按鈕",您可以添加您想添加的內容。
如果你按下JButton"按鈕",它會創建一個JLabel"標簽"(帶有字串 "eenabe "的值),一個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, 鍵監聽器{
/**。
*
*/
private static final long serialVersionUID = 1L;
//Alle Konstruktoren,Variablen,Attribute oder so[/span]。
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"/span>)。
this.setSize(300,700) 。
this.setResizable(false)。
//Newues Objekt von JTextField wird erstellt and alles wird direkt markiert and die Gr??e wird gesett
input = new JTextField("Hier eingeben")。
input.selectAll();
input.setMaximumSize(new Dimension(200,20) )。
//新的JTextField物件將被創建,被集中管理,并有一個ActionListener。
button = new JButton("Hinzufügen"/span>)。
button.setAlignmentX(CENTER_ALIGNMENT)。
button.addActionListener(this)。
//Newues Objekt von JPanel wird erstellt and 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")/span>
public void actionPerformed(ActionEvent e) {
/Wenn button gedrückt wird passiert das
if(e.getSource() == this.button) {
//newues Objekt von JLabel wird erstellt und panel hinzugefügt
label = new JLabel() 。
panel.add(label)。
//Newues Objekt von JButton wird erstellt and 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)。
//Newues Objekt von JCheckBox wird erstellt and 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 自動生成的方法存根。
}
@Override
public void keyTyped(KeyEvent e) {
// TODO 自動生成的方法存根。
}
}
uj5u.com熱心網友回復:
只有最新的組件被洗掉的問題,是因為有一個JLabel/JButton/JCheckBox的單一參考,當添加按鈕被點擊時,它被更新。
因此在洗掉時,只有這些最新更新的參考會從 UI 中被清除。
你可以在一個新的JP面板中添加JLabel/JButton,而在Delete按鈕被點擊時,只需檢查Component.getParent,在這個演示程式中顯示,點擊發生在這個按鈕上。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class AddDeleteFrame {
private JFrame frame;
private int counter;
private void displayGUI () {
counter = 0;
frame = new JFrame ( "Add Delete JFrame" ) 。
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE)。
final JPanel contentPane = new JPanel ( new GridLayout ( 0, 1, 5, 5 ) ) {
@Override
public Dimension getPreferredSize () {
return new Dimension ( 600, 400 ) 。
}
};
JButton button = new JButton ( "Add" ) 。
button.addActionListener ( new ActionListener ( ) {
@Override[/span
public void actionPerformed ( ActionEvent ae ) {
JPanel panel = new JPanel ()。
counter。
JLabel label = new JLabel ( "counter: " counter )。
final JButton b = new JButton ( "Delete" ) 。
b.addActionListener ( new ActionListener ( ) {
@Override[/span
public void actionPerformed ( ActionEvent ae ) {
contentPane.remove ( b.getParent ( )) 。
frame.revalidate()。
frame.repaint ();
}
} );
panel.add ( label );
panel.add ( b );
contentPane.add ( panel );
frame.revalidate ( );
frame.repaint ();
}
} );
contentPane.add ( button );
frame.setContentPane ( contentPane );
frame.pack ();
frame.setLocationByPlatform ( true ) 。
frame.setVisible ( true )。
}
public static void main ( String [] args ) {
EventQueue.invokeLater ( new Runnable ( ) {
@Override[/span
public void run () {
new AddDeleteFrame().displayGUI()。
}
} );
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/328062.html
標籤:
