Swing Dynamisch grafische Objekte erzeugen

MaxG.

Bekanntes Mitglied
Hi,
ich möchte dynamisch Objekte erzeugen, dafür habe ich eine eigene kleine Klasse zum experimentieren angelegt. Allerdings kommt beim erzeugen des Objekts eine Exeption.
Was mache ich Falsch?

Java:
package test;


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

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

public class Test3 {
   
    static JButton button;
    static JFrame frame;
    static JPanel panel;
    static ArrayList<JLabel> labelArray;
   
    public static void main(String[] args){
        frame = new JFrame();
        frame.setSize(200,300);
        panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
        button = new JButton("Create new Label");
        panel.add(button);
        frame.add(panel);
        frame.setVisible(true);
        listener();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
       
       
    }
   
    private static void listener(){
        button.addActionListener(new ActionListener() {
           
            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                newLabel();
                int count = labelArray.size();
                frame.removeAll();
                frame.add(button);
               
                do{
                    frame.add(labelArray.get(count));
                    count --;
                }while(count == 0);
               
            }
        });
    }
   
    private static void newLabel(){
        int count = 1;
        labelArray.add(new JLabel("Test" + count));
       
        count++;
    }
}

In meiner Klasse ist ein Frame dem ein Panel hinzugefügt wird, dabei werden dem Panel noch ein Button hinzugefügt. In dem Listener von dem Button wird eine Methode aufgerufen die die JLabel Objekte erstellt.
 
Hi,
hab jetzt die Arraylist initialisiert, allerdings kommt immer noch eine Exeption:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
    at java.util.ArrayList.rangeCheck(Unknown Source)
    at java.util.ArrayList.get(Unknown Source)
    at test.Test3$1.actionPerformed(Test3.java:50)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
Java:
package test;


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

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

public class Test3 {
   
    static JButton button;
    static JFrame frame;
    static JPanel panel;
    static ArrayList<JLabel> labelArray;
   
    public static void main(String[] args){
        frame = new JFrame();
        frame.setSize(200,300);
        panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
        button = new JButton("Create new Label");
        panel.add(button);
        frame.add(panel);
        frame.setVisible(true);
        listener();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
       
       
    }
   
    private static void listener(){
        button.addActionListener(new ActionListener() {
           
            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                newLabel();
                int count = labelArray.size();
                frame.removeAll();
                frame.add(button);
               
                do{
                   
                    frame.add(labelArray.get(count));
                    count --;
                   
                }while(count == 0);
               
            }
        });
    }
   
    private static void newLabel(){
        int count = 1;
        labelArray = new ArrayList<>();
        labelArray.add(new JLabel("Test" + count));
       
        count++;
    }
}
 
Moin,
Dein Problem dürfte hier begründet sein:
Java:
private static void newLabel()
{
    int count = 1;
    labelArray.add(new JLabel("Test" + count));
    count++;
}
Du hast also nur EIN Element in der Liste - dies steht mit Index '0' drin !!

Dadurch kommt die Indexverletzung:
Java:
// ...
int count = labelArray.size();  // count ist '1', da ein Element
// ...
frame.add( labelArray.get(count) ); // '.get(1)' geht aber nicht, nur '.get(0)' !!!
// ...

VG Klaus
 
Hi,
hab meinen Code jetzt angepasst aber es wird nur ein objekt erzeugt und nicht angezeigt.
Java:
package test;


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

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

public class Test3 {
   
    static JButton button;
    static JFrame frame;
    static JPanel panel;
    static ArrayList<JLabel> labelArray;
   
    public static void main(String[] args){
        frame = new JFrame();
        frame.setSize(200,300);
        panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
        button = new JButton("Create new Label");
        panel.add(button);
        frame.add(panel);
        frame.setVisible(true);
        listener();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
       
       
    }
   
    private static void listener(){
        button.addActionListener(new ActionListener() {
           
            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                newLabel();
                int count = labelArray.size();
                panel.removeAll();
                panel.add(button);
               
                System.out.println(count);
               
                do{
                   
                    count --;
                    System.out.println(count);
                    panel.add(labelArray.get(count));
                   
                   
                   
                }while(count != 0);
                panel.repaint();
               
            }
        });
    }
   
    private static void newLabel(){
        int count = 1;
        labelArray = new ArrayList<>();
        labelArray.add(new JLabel("Test" + count));
       
        count++;
    }
}
 

Neue Themen


Zurück
Oben