Java Applet - For 循环递减组件堆栈

标签 java vector applet

我创建了一个小程序,当您按下“添加到队列”按钮时,它会创建一行按钮,最多 15 个按钮。我现在想使用 for 循环递减该行。我希望它从左到右递减。我只能让它从右到左递减。我知道这与我的“删除”方法中的代码有关,但我似乎不知道如何修复它。作为新手,我将不胜感激您提供的任何帮助。

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
public class Main extends javax.swing.JApplet {
private final int width = 60; 
private final int height = 24; 
private final int maxItems = 15; 
private int x = 40 + width; 
private int y = 260; 
private int count = 1; 
private JButton jAdd;
private JButton jRemove;
Vector<JButton> stack = new Vector<JButton>();

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            JFrame frame = new JFrame();
            Main inst = new Main();
            frame.getContentPane().add(inst);
            ((JComponent) frame.getContentPane()).setPreferredSize(inst
                    .getSize());
            frame.pack();
            frame.setVisible(true);
        }
    });

}

public Main() {
    super();
    initGUI();

}

private void initGUI() {
    try {
        this.setSize(719, 333);
        getContentPane().setLayout(null);
        {
            jAdd = new JButton();
            getContentPane().add(jAdd);
            jAdd.setText("Add to Queue");
            jAdd.setBounds(43, 300, 150, 24);
            jAdd.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    jAddActionPerformed(evt);
                }
            });
        }
        {
            jRemove = new JButton();
            getContentPane().add(jRemove);
            jRemove.setText("Remove from queue");
            jRemove.setBounds(950, 300, 150, 24);
            jRemove.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    jRemoveActionPerformed(evt);
                }
            });
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

private void jAddActionPerformed(ActionEvent evt) {
    if (count > maxItems) {
        JOptionPane.showMessageDialog(null, "The queue is full");
        return;
    }
    JButton b = new JButton();
    stack.add(0, b);
    getContentPane().add(b);
    int textCount = count;
    b.setText("" +textCount++);
    b.setBounds(x, y, width, height);
    x = x + width;
    count++;

}

private void jRemoveActionPerformed(ActionEvent evt) {
    if (stack.isEmpty()) {
        JOptionPane.showMessageDialog(null, "The queue is empty");
        return;
    }
    JButton b = stack.remove(0);
    this.remove(b);
    for(int originalX = 880; originalX < 880; originalX--){
        x = 880 - width;
    }
    repaint();
    count--;

}

}

最佳答案

问题是这样的:

stack.add(0, b);

您总是将新的 vector 添加到 vector 的开头(索引 0)。删除它,您将看到您想要的行为。

stack.add(b);

关于Java Applet - For 循环递减组件堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22101087/

相关文章:

list - R 中向量和列表数据类型有什么区别?

Java Applet 不使用 jaybird 执行 class.forName()

java - REST 从 jQuery : Method Not Allowed error 中删除

java - 找不到类 javax.persistence.EntityNotFoundException

c++ - 从 std::vector 中的特定索引中删除

java - 处理 Applet 抛出 java.lang.ExceptionInInitializerError 并阻止其运行

java - 如何从小程序中的另一个方法调用重绘?

java - 我输入的分数总是返回 0?

java - 使用 Java 有选择地解析日志文件

c++ - 在模板类中折叠指针?