LayoutManager GridLayout 0/0 auf andere Ecke setzen

  • Themenstarter Themenstarter Firephoenix
  • Beginndatum Beginndatum
F

Firephoenix

Gast
Hi,
leider ist es mir nicht gelungen mein Problem über die API oder google zu lösen (ich bin mir nichtmal sicher ob es machbar ist 😀).
Ist es möglich das GridLayout so zu verändern, dass 0/0 nicht oben links ist, sondern unten links und dann mit add jeweils nach oben anstatt nach unten gefüllt wird?
Ich versuche gerade einen Array-Datentyp per Schleifen auszugeben und müsste meinen Algorythmus nur gering anpassen, wenn ich einfach die Aufbauart des Gridbag ändern könnte.
Wisst ihr ob es dazu eine einfache Methode gibt die ich evtl übersehen habe?

Beste Grüße,
Firephoenix
 
Ich glaube das geht so von Haus aus mit dem Layout nicht, du kannst ja aber einfach die Methode
Code:
layoutContainer
überschreiben 🙂

Code:
parent.getComponent(i).setBounds(x, y, w, h);
ist dort der entscheidende Teil. Entweder du änderst dort das i entsprechend oder eben die Position 😀
 
Hi,
danke für die Antworten, ich meinte tatsächlich das GridLayout, bin nur nach einigen Fehlversuchen ziemlich Gridbag-geschädigt und versuche nach wie vor diesen Begriff aus meinem Gehirn zu löschen 😳

Ich markier hier auch mal als erledigt, manchmal kommt man auf eine einfache Lösung erst nachdem man mal darüber geschlafen hat und seine Sorgen im Kaffee ertränkt:
Schleifen die die Array-Struktur übertragen einfach andersrum laufen lassen 😀
Oder anders: Warum die Tafel drehen, wenn man den Projektor auf den Kopf stellen kann 😉

Gruß Firephoenix
 
bin nur nach einigen Fehlversuchen ziemlich Gridbag-geschädigt und versuche nach wie vor diesen Begriff aus meinem Gehirn zu löschen
Ich stelle trotzdem mal eine funktionierende Lösung mit GridBag hier hin. Vielleicht kann einer das ja mal gebrauchen 🙂 :
Java:
import java.awt.*;
import static java.awt.GridBagConstraints.*;
import java.awt.event.*;
import javax.swing.*;

public class GblBottomUp extends JFrame {

    private JButton btAdd;
    private JPanel panel;
    private GridBagLayout gbl;
    private final static int MAX_COLUMNS = 4;
    private int column, componentCount;

    public GblBottomUp() {
        initComponents();
    }

    private void initComponents() {
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        btAdd = new JButton("Add");
        panel = new JPanel(gbl = new GridBagLayout());
        getContentPane().add(btAdd, BorderLayout.PAGE_START);
        getContentPane().add(panel, BorderLayout.CENTER);
        for (int i = 0; i < MAX_COLUMNS; i++) {
            addBottomUp();
        }
        pack();
        btAdd.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(final ActionEvent evt) {
                addBottomUp();
                pack();
            }
        });
    }

    private void addBottomUp() {
        Component[] components = panel.getComponents();
        for (Component component : components) {//adapt gridy
            GridBagConstraints constraints = gbl.getConstraints(component);
            constraints.gridy += column == 0 ? 1 : 0;//new row with column 0
            gbl.setConstraints(component, constraints);
        }
        panel.add(createTestComponent(), constraints(column, 0, 1, 0, BOTH));
        column = column++ > MAX_COLUMNS - 2 ? 0 : column;//new column
    }

    private JComponent createTestComponent() {
        JComponent comp = new JButton("Test_" + ++componentCount);
        comp.setPreferredSize(new Dimension(100, 22));
        return comp;
    }

    private GridBagConstraints constraints(final int x, final int y,
            final double weightx, final double weighty, final int fill) {
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridx = x;
        gbc.gridy = y;
        gbc.weightx = weightx;
        gbc.weighty = weighty;
        gbc.insets = new Insets(4, 4, 4, 4);
        gbc.fill = fill;
        return gbc;
    }

    public static void main(final String... args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new GblBottomUp().setVisible(true);
            }
        });
    }
}
Gruß,
André
 

Neue Themen


Zurück
Oben