2014-02-28 68 views
0

當您按下「添加到隊列」按鈕時,我創建了一個Applet,它創建一排按鈕,最多15個按鈕。我現在想用for循環來減少這一行。我希望它從左到右遞減。我只能從右到左遞減。我知道它與我的「刪除」方法中的代碼有關,但我似乎無法弄清楚如何解決它。作爲新手,我會感謝您提供的任何幫助。Java小程序 - 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--; 

} 

} 

回答

1

的問題是這樣的:

stack.add(0, b); 

你一直在增加新的一個到Vector的開始(索引0)。刪除它,你會看到你想要的行爲。

stack.add(b); 
+0

完美的工作。當我使用這個解決方案時,我發現我甚至不需要這個循環,而且它更簡單。 – user2948381