Hallo,
ich baue zurzeit eine GUI. Ich passe zurzeit den Inhalt etwas an und versuche das ganze etwas ansehlicher anzuordnen. Ich stehe nun vor einem Problem. Ich bekomme die Buttons im JPanel nicht richtig angeordnet.
Hier mal mein Code:
Klasse SGFrame
Klasse SGBubbleSort:
Klasse SGInsertionSort:
Klasse SGSelectionSort:
Klasse SGButtons:
Klasse SGMain:
Mein Hauptproblem besteht im JPanel unten2. Wenn ich durch Drücken auf einen Button wie z.B. BubbleSort klicke werden die Buttons (egal wieviele) so angezeigt das diese den kompletten JPanel füllen. Wenn ich die Position von unten2 auf (....., BorderLayout.South) ändere werden die Buttons schön von unten nach oben Original Größe, ohne diese über das ganze Panel zu maximieren, angezeigt. Genau so möchte ich das, nur von oben angefangen! Ich bekomms aber nicht hin. Kann mir jemand helfen? Ist bestimmt was ganz einfaches
Grüße,
Christian
ich baue zurzeit eine GUI. Ich passe zurzeit den Inhalt etwas an und versuche das ganze etwas ansehlicher anzuordnen. Ich stehe nun vor einem Problem. Ich bekomme die Buttons im JPanel nicht richtig angeordnet.
Hier mal mein Code:
Klasse SGFrame
Java:
package sortguipckg;
import java.awt.*;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.EtchedBorder;
import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;
public class SGFrame extends JFrame {
private static final long serialVersionUID = 1L;
JPanel oben = new JPanel();
JPanel unten = new JPanel();
JPanel unten2 = new JPanel();
Border loweredetched = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED);
TitledBorder titel;
/* public class MyInnerClassActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if("BubbleButton".equals(e.getActionCommand())) {
unten2.removeAll();
SGBubbleSort bubble = new SGBubbleSort(unten2);
pack();
}
if("InsertionButton".equals(e.getActionCommand())) {
unten2.removeAll();
SGInsertionSort insertion = new SGInsertionSort(unten2);
pack();
}
if("SelectionButton".equals(e.getActionCommand())) {
unten2.removeAll();
SGSelectionSort insertion = new SGSelectionSort(unten2);
pack();
}
}
}*/
public SGFrame() {
super("SortGUI v1.0 (C)opyrigth Christian Lang");
setSize(1024, 768);
Container MainContainer = getContentPane();
BorderLayout BorderLayoutMain = new BorderLayout();
//BorderLayout bl = new BorderLayout();
MainContainer.setLayout(BorderLayoutMain);
GridLayout GridLayoutOben = new GridLayout(0,6);
oben.setLayout(GridLayoutOben);
titel = BorderFactory.createTitledBorder("Sortieralgorithmen");
oben.setBorder(titel);
GridLayout GridLayoutUnten = new GridLayout(0,10);
unten2.setLayout(GridLayoutUnten);
unten2.setBackground(Color.red);
SGButtons BubbleButton = new SGButtons("BubbleSort", this);
//BubbleButton.addActionListener(new MyInnerClassActionListener());
BubbleButton.setActionCommand("BubbleButton");
SGButtons InsertionButton = new SGButtons("InsertionSort", this);
//InsertionButton.addActionListener(new MyInnerClassActionListener());
InsertionButton.setActionCommand("InsertionButton");
SGButtons SelectionButton = new SGButtons("SelectionSort", this);
//SelectionButton.addActionListener(new MyInnerClassActionListener());
SelectionButton.setActionCommand("SelectionButton");
//add(new JSeparator(SwingConstants.HORIZONTAL));
add(oben, BorderLayout.PAGE_START);
oben.add(BubbleButton);
oben.add(InsertionButton);
oben.add(SelectionButton);
add(unten2, BorderLayout.AFTER_LINE_ENDS);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
}
Klasse SGBubbleSort:
Java:
package sortguipckg;
import javax.swing.JPanel;
public class SGBubbleSort {
private int AnzahlZahlen = 10;
private int zahlen[] = new int[AnzahlZahlen];
private int Sortszahlen[] = new int[zahlen.length];
private int Buffer1;
private int Buffer2;
private int match = 0;
private int counter = 0;
private SGFrame myframe;
public SGBubbleSort(JPanel name, SGFrame frame) {
myframe = frame;
for (int i = 0; i < AnzahlZahlen; i++) {
zahlen[i] = (int) ((Math.random()) * (zahlen.length));
}
for (int i = 0; i < AnzahlZahlen; i++) {
Sortszahlen[i] = zahlen[i];
}
java.util.Arrays.sort(Sortszahlen);
do {
for (int i = 0; i < zahlen.length - 1; i++) {
if (zahlen[i] > zahlen[i + 1]) {
Buffer1 = zahlen[i];
Buffer2 = zahlen[i + 1];
zahlen[i] = Buffer2;
zahlen[i + 1] = Buffer1;
}
}
System.out.println(java.util.Arrays.toString(zahlen));
addButtons(zahlen, name);
for (int i = 0; i < AnzahlZahlen; i++) {
if (zahlen[i] == Sortszahlen[i]) {
match = match + 1;
}
}
if (match < AnzahlZahlen) {
match = 0;
}
} while (match < AnzahlZahlen);
}
private void addButtons(int[] zufallszahlen2, JPanel name) {
for(int i = 0; i<zahlen.length; i++) {
SGButtons ButtonY = new SGButtons(zahlen[i] + "", myframe);
name.add(ButtonY);
name.revalidate();
}
}
}
Klasse SGInsertionSort:
Java:
package sortguipckg;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class SGInsertionSort {
private int AnzahlZahlen = 10;
private int[] zahlen = new int[AnzahlZahlen];
private int i, j, v, k;
private SGFrame myframe;
public SGInsertionSort(JPanel name, SGFrame frame) {
myframe = frame;
for (int m = 1; m < zahlen.length ; m++) {
zahlen[m] = (int)(10*Math.random());
}
System.out.println("first" + java.util.Arrays.toString(zahlen));
addButtons(zahlen, name);
for (i = 2; i < zahlen.length; i++) {
v = zahlen[i];
j = i;
while (zahlen[j-1] > v) {
zahlen[j] = zahlen[j-1];
j--;
zahlen[j] = v;
System.out.println(java.util.Arrays.toString(zahlen));
addButtons(zahlen, name);
}
}
System.out.println("final" + java.util.Arrays.toString(zahlen));
addButtons(zahlen, name);
}
private void addButtons(int[] zahlen2, JPanel name) {
for(int i = 0; i<zahlen.length; i++) {
SGButtons ButtonZ = new SGButtons(zahlen[i] + "", myframe);
name.add(ButtonZ);
name.revalidate();
}
}
}
Klasse SGSelectionSort:
Java:
package sortguipckg;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class SGSelectionSort {
private int AnzahlZahlen = 10;
private int[] zahlen = new int[AnzahlZahlen];
private int i, j, min, temp, k;
private SGFrame myframe;
public SGSelectionSort(JPanel name, SGFrame frame) {
myframe = frame;
for (int m = 1; m < zahlen.length ; m++) {
zahlen[m] = (int)(10*Math.random());
}
for(int i=0;i<zahlen.length-1;i++){
int min=i;
for (int j=i+1;j<zahlen.length;j++){
if(zahlen[j]<zahlen[min]){
min=j;
System.out.println(java.util.Arrays.toString(zahlen));
addButtons(zahlen, name);
}
int temp=zahlen[min];
zahlen[min]=zahlen[i];
zahlen[i]=temp;
}
}
System.out.println("FINAL " + java.util.Arrays.toString(zahlen));
addButtons(zahlen, name);
}
private void addButtons(int[] zahlen2, JPanel name) {
for(int i = 0; i<zahlen.length; i++) {
SGButtons ButtonX = new SGButtons(zahlen[i] + "", myframe);
name.add(ButtonX);
name.revalidate();
}
}
}
Klasse SGButtons:
Java:
package sortguipckg;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
@SuppressWarnings("serial")
public class SGButtons extends JButton {
private SGFrame myframe;
public class MyInnerClassActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if("BubbleButton".equals(e.getActionCommand())) {
myframe.unten2.removeAll();
SGBubbleSort bubble = new SGBubbleSort(myframe.unten2, myframe);
//myframe.pack();
}
if("InsertionButton".equals(e.getActionCommand())) {
myframe.unten2.removeAll();
SGInsertionSort insertion = new SGInsertionSort(myframe.unten2, myframe);
//myframe.pack();
}
if("SelectionButton".equals(e.getActionCommand())) {
myframe.unten2.removeAll();
SGSelectionSort insertion = new SGSelectionSort(myframe.unten2, myframe);
//myframe.pack();
}
}
}
SGButtons(String text, SGFrame frame) {
super(text);
setPreferredSize(new Dimension(100,25));
this.setMaximumSize(getPreferredSize());
addActionListener(new MyInnerClassActionListener());
myframe = frame;
}
}
Klasse SGMain:
Java:
package sortguipckg;
public class SGMain {
public static void main(String[] args) {
SGFrame sgf = new SGFrame();
}
}
Mein Hauptproblem besteht im JPanel unten2. Wenn ich durch Drücken auf einen Button wie z.B. BubbleSort klicke werden die Buttons (egal wieviele) so angezeigt das diese den kompletten JPanel füllen. Wenn ich die Position von unten2 auf (....., BorderLayout.South) ändere werden die Buttons schön von unten nach oben Original Größe, ohne diese über das ganze Panel zu maximieren, angezeigt. Genau so möchte ich das, nur von oben angefangen! Ich bekomms aber nicht hin. Kann mir jemand helfen? Ist bestimmt was ganz einfaches
Grüße,
Christian
Anhänge
Zuletzt bearbeitet: