Swing Variable Anzahl an JButtons

larsf96

Mitglied
Hallo,

ich bin gerade am Überlegen, wie man eine variable Anzahl an Buttons zu einem JPanel hinzufügen kann. Das ganze läuft auf eine Art Quiz hinaus, wo zu jeder Frage eben eine unterschiedliche Anzahl an Antworten gegeben werden muss. Es können manchmal 3 Antworten sein, aber auch 4,5,6 oder 8, also komplett variabel. Meine einzige Idee bisher war, für jede Anzahl an Antworten ein eigenes JPanel zu erstellen und dann per CardLayout jeweils das richtige Panel auszuwählen. Da das allerdings ziemlich kompliziert ist und eben unzählig viele Panels erstellt werden müssten würde ich gerne mal wissen, ob es dafür auch eine einfachere Alternative gäbe.

LG,
Lars
 

larsf96

Mitglied
Vorab: Gemeint waren Checkboxen, keine Buttons :noe:
Das ist mir schon klar, aber ich bin was Designs etc. anbetrifft nicht so fit.
Müsste ich dann im Vorfeld einfach genug Checkboxen definieren und initialisieren und später dann je nach Anzahl die Checkboxen in einer Schleife hinzufügen? Wie sähe das das dann mit dem Design aus? Ab einer gewissen Anzahl von Checkboxen sollten diese am Besten nebeneinander und untereinander sein, nicht nur untereinander.
Außerdem müsste die Beschriftung bei jeder Frage dann geändert werden.
 

lam_tr

Top Contributor
Meiner Meinung nach sind Checkboxen mehr als 5 schon zu viel, sei es in einer Reihe oder untereinander, warum nicht stattdessen dann eine Combobox benutzen?
 

larsf96

Mitglied
Da die Checkboxen dazu da sind, die genannten Antworten abzuhaken ist eine Checkbox da meiner Meinung nach deutlich sinnvoller als eine Combobox. Auch wenn es dann viele Checkboxen werden, anders gehts nicht.
 

lam_tr

Top Contributor
Axo stimmt, ich habe falsch gedacht. Hab irgendwie Checkboxen mit RadiobBoxen assoziiert. Man könnte das ganze auch in eine Tabelle machen und Checkboxen setzen, dann sieht es nicht so viel aus und man kann gut scrollen. Tabelle kannst du auch dynamisch machen.
 

X5-599

Top Contributor
Also wenn es dir Hauptsächlich um einem geeigneten LayoutManager geht, hätte ich da was. Hab den hier mal bei StackOverflow gefunden. Soll dem FlowLayout ähnlich sein; nur vertikal statt horizontal. So lange also Platz da ist, werden die Elemente (hier: CheckBoxes) untereinander angeordnet. Werden es zu viele, oder wird das Fenster resized wandern die Elemente in die nächste "Spalte".

Hab hier und da mal was geändert, aber im Grunde ist das der Code von Stackoverflow:

Java:
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.LayoutManager2;
import java.util.ArrayList;
import java.util.List;

public class VerticalFlowLayout implements LayoutManager2
{
	final private List<Component> components;
	
	private int hgap = 0;
	private int vgap = 0;
	
	public VerticalFlowLayout()
	{
		this(0, 0);
	}
	
	public VerticalFlowLayout(int hgap, int vgap)
	{
		this.hgap = hgap;
		this.vgap = vgap;
		
		this.components = new ArrayList<Component>();
	}
	
	public void setHGap(int hgap)
	{
		this.hgap = hgap;
	}
	
	public void setVGap(int vgap)
	{
		this.vgap = vgap;
	}
	
	@Override
	public void addLayoutComponent(Component comp, Object constraints)
	{
		this.components.add(comp);
	}
	
	@Override
	public float getLayoutAlignmentX(Container target)
	{
		 return 0.5f;
	}
	
	@Override
	public float getLayoutAlignmentY(Container target)
	{
		 return 0.5f;
	}
	
	@Override
	public void invalidateLayout(Container target)
	{
	}
	
	@Override
	public void addLayoutComponent(String name, Component comp)
	{
		this.components.add(comp);
	}
	
	@Override
	public void layoutContainer(Container parent)
	{
		int x = 0;
		int y = 0;
		int columnWidth = 0;
		for(Component c : this.components)
		{
			if(c.isVisible())
			{
				Dimension d = c.getPreferredSize();
				columnWidth = Math.max(columnWidth, d.width);
				if(y+d.height > parent.getHeight())
				{
					x += columnWidth + this.hgap;
					y = 0;
				}
				c.setBounds(x, y, d.width, d.height);
				y += d.height + this.vgap;
			}
		}
	}
	
	@Override
	public Dimension minimumLayoutSize(Container parent)
	{
		return new Dimension(0, 0);
	}
	
	@Override
	public Dimension preferredLayoutSize(Container parent)
	{
		return new Dimension(200, 200);
	}
	
	@Override
	public Dimension maximumLayoutSize(Container target)
	{
		return new Dimension(600, 600);
	}
	
	@Override
	public void removeLayoutComponent(Component comp)
	{
		this.components.remove(comp);
	}
}
 

MrTroble

Bekanntes Mitglied
Das hier hab ich mal mit Labeln gemacht
Java:
public static void main(String[] args) {
        
         f = new JFrame();
         f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         f.setVisible(true);
         
         fl = new JTextField("");
         fl.setBounds(20, 130,140, 30);
         
         tm = new JTextField("");
         tm.setBounds(20, 180,140, 30);
         
         add = new JButton("Add a Timepoint");
         add.setBounds(20,30, 150, 80);
         add.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
                if(!fl.getText().isEmpty()){
                String sl = fl.getText();
                if(sl == ""){
                    
                }else if(!(sl == null)){
                try {


                    addl(new JButton(sl));



                } catch (FileNotFoundException e1) {
                    e1.printStackTrace();
                }
                }
                }
            }
        });
         
         option = new JButton("Options");
         option.setBounds(20, 260,140, 30);
         option.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
                Object[] options = { "Sound" , "Color", "BACK"};
                Object o = null;
                Component ops = null;
                int op = JOptionPane.showOptionDialog(ops, "-?-Options-?-", "Options", JOptionPane.DEFAULT_OPTION, JOptionPane.DEFAULT_OPTION, null, options , o);
                switch(op){
                case 0:
                    break;
                case 1:
                    Object[] color = {"Black","Red","Green","Yellow"};
                    Object co = null;
                    Component cops = null;
                    int cop = JOptionPane.showOptionDialog(cops, "-?-Options-?-Color-?-", "Options-Color", JOptionPane.DEFAULT_OPTION, JOptionPane.DEFAULT_OPTION, null, color , co);
                    switch(cop){
                    case 0:colo = 0;
                    break;
                    case 1:colo = 1;
                    break;
                    case 2:colo = 2;
                    break;
                    case 3:colo = 3;
                    break;
                    }
                    break;
                }
            }
        });
         
         f.setLayout(null);
         f.add(add);
         f.add(fl);
         f.add(tm);
         f.add(option);
         f.setBounds(0, 0, 1900, 1000);


    }
    public static void addl(JButton lab) throws FileNotFoundException{
        if(lab == null){
            
            f.repaint();
        }else{
        lab.setBounds(b1, b2, 180, 30);
        lab.setBackground(Color.pink);
        switch(colo){
        case 0:lab.setForeground(Color.black);
        break;
        case 1:lab.setForeground(Color.red);
        break;
        case 2:lab.setForeground(Color.green);
        break;
        case 3:lab.setForeground(Color.yellow);
        break;
        }
        if(bz == true){
        b2 += 40;
        }
        if(b2 >= 1600){
            bz = false;
            JOptionPane.showConfirmDialog(null, "Please delete the older sections");
        }
        if(b2 >= 800){
            
            b1 += 180;
            b2 = 30;
                
            
        }
        try{
            FileAttribute<?> of = null;
            Files.createFile(Paths.get(System.getProperty("user.dir") + "/options.txt"), of);
            FileOutputStream os = new FileOutputStream(System.getProperty("user.dir") + "/options.txt");
        } catch (IOException e) {
            e.printStackTrace();
        }
        f.add(lab);
        f.repaint();
    }
sobald man also im Textfield enter gedrukt hatt hatt es ein neuen Button erstellt und dass Frame gerepainted
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Kandum obj_JMenu.addMenuListener - variable Anzahl an JMenus / menulistenern & frame.setTitle() dynamisch AWT, Swing, JavaFX & SWT 7
O No X11 DISPLAY Variable was set AWT, Swing, JavaFX & SWT 6
jojoge wie kann ich in eine Benennung eines JButtons eine Variable einbauen? AWT, Swing, JavaFX & SWT 6
S Swing jx cannot be resolved to a variable (2.) AWT, Swing, JavaFX & SWT 1
S Swing jx cannot be resolved to a variable AWT, Swing, JavaFX & SWT 6
S Swing Variable in Actionlistener aufrufen AWT, Swing, JavaFX & SWT 10
F Wie bekomme ich den Wert der ComboBox in eine Variable gespeichert welche ich für meinen ActionListener nutzen kann? AWT, Swing, JavaFX & SWT 3
S Java GUI durch variable Größe einer Map anpassen AWT, Swing, JavaFX & SWT 3
J jButton soll nach klicken eine Variable um 1 erhöhen AWT, Swing, JavaFX & SWT 2
G Swing Variable Elemente für GroupLayout AWT, Swing, JavaFX & SWT 18
MR._FIRE_Flower Variable setzten mit JButton AWT, Swing, JavaFX & SWT 5
P Variable einer Eingabe in anderes Textfeld schreiben AWT, Swing, JavaFX & SWT 7
Z ActionListener Variable übergeben AWT, Swing, JavaFX & SWT 12
K Wie kann ich eine Variable zwischen Tab Klassen weitergeben ? AWT, Swing, JavaFX & SWT 7
U Eingabe von TextField in variable speichern AWT, Swing, JavaFX & SWT 2
B SWT Globale Variable AWT, Swing, JavaFX & SWT 10
Z Swing Variable eines Objekt aus Hashmap in JList anzeigen AWT, Swing, JavaFX & SWT 1
J ActionListener erkennt Variable nicht AWT, Swing, JavaFX & SWT 6
D JavaFX Gesetzte Variable in einem Controller im Controller laden AWT, Swing, JavaFX & SWT 1
Z Wird die Variable nicht übergeben ? AWT, Swing, JavaFX & SWT 16
L ActionPerformed Variable übergeben AWT, Swing, JavaFX & SWT 3
J Bilder als Variable an einem Objekt speichern AWT, Swing, JavaFX & SWT 3
J JavaFX Variable an neue Scene übergeben AWT, Swing, JavaFX & SWT 8
V Warum wird meine Variable nicht erkannt? AWT, Swing, JavaFX & SWT 2
M Swing Alter Wert von einer Variable wird verwendet AWT, Swing, JavaFX & SWT 8
F Swing TextField Eingabe in Variable umwandeln um zum Beispiel zu rechnen. AWT, Swing, JavaFX & SWT 3
J Swing String soll als Variable dienen AWT, Swing, JavaFX & SWT 11
B Variable ist leer / Scope von Variablen AWT, Swing, JavaFX & SWT 2
J Button En-/Disablen - Warum variable final? AWT, Swing, JavaFX & SWT 2
M private Variable übergeben AWT, Swing, JavaFX & SWT 12
U AWT local variable * is accessed from within inner class; needs to be declared final AWT, Swing, JavaFX & SWT 6
R Swing Variable Panelbreite ohne Layoutmanager AWT, Swing, JavaFX & SWT 6
T Image skaliert in Variable speichern AWT, Swing, JavaFX & SWT 6
H Swing variable in Numberfield ausgeben AWT, Swing, JavaFX & SWT 5
H variable Höhe einer JTextArea (als Renderer/Editor) als Zelle einer JTable AWT, Swing, JavaFX & SWT 9
C Swing JTextPane zeigt HTML-Text aus Variable nicht an :( AWT, Swing, JavaFX & SWT 3
B Anprechen von TextAreas mit Variable AWT, Swing, JavaFX & SWT 2
N Listener für Variable AWT, Swing, JavaFX & SWT 4
B Button benennen via Variable? AWT, Swing, JavaFX & SWT 6
B Variable wird nicht gefunden AWT, Swing, JavaFX & SWT 5
C Button/Textfeld mit Variable verknüpfen AWT, Swing, JavaFX & SWT 4
B Swing Variable in JTextfield geht nicht AWT, Swing, JavaFX & SWT 10
B problem mit variable (final) AWT, Swing, JavaFX & SWT 7
P Zeichen abhängig davon, ob sich eine Variable geändert hat AWT, Swing, JavaFX & SWT 2
T statische Variable zum Referenzieren einer Instanz von Frame AWT, Swing, JavaFX & SWT 3
J Integer aus Textdatei auslesen und in Variable speichern AWT, Swing, JavaFX & SWT 11
T Variable Menge an Bildern außerhalb paint() zeichnen? AWT, Swing, JavaFX & SWT 2
J -variable Formular Klasse AWT, Swing, JavaFX & SWT 2
E Variable übergeben AWT, Swing, JavaFX & SWT 4
B Cannot refer to a non-final variable (JButton) AWT, Swing, JavaFX & SWT 3
kb frame als globale variable AWT, Swing, JavaFX & SWT 2
G JTable - Zeilenhöhe variable? AWT, Swing, JavaFX & SWT 2
D Auf Variable zugreifen AWT, Swing, JavaFX & SWT 3
G variable übergeben in andere klasse AWT, Swing, JavaFX & SWT 4
S Bild in einer Variable speichern AWT, Swing, JavaFX & SWT 7
S Eingabe des Textfeldes in Variable speichern AWT, Swing, JavaFX & SWT 7
R JFrame -- Variable Positionierung durch Window Manager? AWT, Swing, JavaFX & SWT 2
M variable Jtable AWT, Swing, JavaFX & SWT 4
P GetSelectetItem() erkennt Variable aus Liste nicht. AWT, Swing, JavaFX & SWT 2
K Polygon in image variable? AWT, Swing, JavaFX & SWT 2
T Variable Zeilenhöhe in jTable AWT, Swing, JavaFX & SWT 5
P JTable variable Zeilengröße AWT, Swing, JavaFX & SWT 3
O Display Env. Variable unter (X11) von ClientApp. abfragen AWT, Swing, JavaFX & SWT 2
H automatische Anzahl der Spalten ermitteln -> geht nicht AWT, Swing, JavaFX & SWT 6
G LayoutManager Beliebige Anzahl von Panels für LayoutManager AWT, Swing, JavaFX & SWT 3
H TableView mit variabler Anzahl Spalten AWT, Swing, JavaFX & SWT 2
D Swing JSlider Tip Anzahl AWT, Swing, JavaFX & SWT 3
Hijo2006 Anzahl der Excelzeilen AWT, Swing, JavaFX & SWT 1
K SWT DataBinding, Anzahl der Zeilen aktualisieren AWT, Swing, JavaFX & SWT 4
K AWT begrenzte anzahl paint aufrufe AWT, Swing, JavaFX & SWT 6
M Anzahl Frames in Taskleiste AWT, Swing, JavaFX & SWT 2
R Swing unbegrenzte Anzahl vonEinträgen in JList AWT, Swing, JavaFX & SWT 2
DEvent Swing JTextField Anzahl an sichtbaren Zeichen AWT, Swing, JavaFX & SWT 4
Y JTable mit großer Anzahl von Datensätzen AWT, Swing, JavaFX & SWT 3
G Swing JTextArea mit fester Anzahl Spalten! AWT, Swing, JavaFX & SWT 10
T Anzahl Event Listeners AWT, Swing, JavaFX & SWT 4
O Anzahl der Zeilen im TableViewer AWT, Swing, JavaFX & SWT 12
G JList mit einer großen Anzahl an Einträgen AWT, Swing, JavaFX & SWT 15
Airwolf89 Swing Anzahl der Tabellenspalten dynamisch setzen AWT, Swing, JavaFX & SWT 2
T entsprechende Anzahl an jCheckboxen in einer jTable AWT, Swing, JavaFX & SWT 5
M Problem mit Festsetzen der Anzahl ein reihen in einer JTable AWT, Swing, JavaFX & SWT 11
M Komponenten einer unbestimmten Anzahl und MouseListener AWT, Swing, JavaFX & SWT 4
J jTextarea Anzahl Zeichen in einer Zeile begrenzen AWT, Swing, JavaFX & SWT 2
S JList gibt nach Sortierung mit Collections keine Anzahl mehr AWT, Swing, JavaFX & SWT 3
B random anzahl an jTextFieldern einfügen AWT, Swing, JavaFX & SWT 2
J Große Anzahl von Comboboxen in Tabelle darstellen AWT, Swing, JavaFX & SWT 2
G Tabelle mit variabler Anzahl an Zeilen AWT, Swing, JavaFX & SWT 3
M JList mit unbestimmter Anzahl Panels füllen AWT, Swing, JavaFX & SWT 4
X JTable --> Anzahl der Spalten ändern AWT, Swing, JavaFX & SWT 8
S Anzahl ActionEvents (Strings in eine ArrayList einfügen) AWT, Swing, JavaFX & SWT 4
G JPanel per Drag and Drop JButtons und Bilder ablegen AWT, Swing, JavaFX & SWT 1
G JPanel mit JButtons und Bilder AWT, Swing, JavaFX & SWT 5
schoel27 Mehrere JButtons sollen das gleiche Event auslösen AWT, Swing, JavaFX & SWT 2
H Auswahlmenü mit JButtons AWT, Swing, JavaFX & SWT 4
H JButtons werden nicht angezeigt AWT, Swing, JavaFX & SWT 5
A Swing Meine JButtons werden nicht angezeigt bitte helft mir AWT, Swing, JavaFX & SWT 2
N "Automatisches" erstellen von jButtons AWT, Swing, JavaFX & SWT 1
F JButtons neu laden AWT, Swing, JavaFX & SWT 4
N Swing JButtons werden nach repaint() doppelt dargestellt AWT, Swing, JavaFX & SWT 12
A Swing Probleme mit dem adden von JButtons zur JScrollPane AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben