Wie kann man am Besten die 3 Buttons (saveButton - refreshButton - exitButton)
unterhalb des SpringLayout sichtbar machen (neben einander in einer Reihe) ?
Meine Lösung funktioniert anscheinend nicht so, wie ich sie mir vorgestellt habe !
unterhalb des SpringLayout sichtbar machen (neben einander in einer Reihe) ?
Meine Lösung funktioniert anscheinend nicht so, wie ich sie mir vorgestellt habe !
Java:
package com.mycompany.springlayoutdemo;
import java.awt.*;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import javax.swing.*;
public class SpringLayoutDemo
{
private static Container createForm(Component[] leftComponents,
Component[] rightComponents,
int initialX, int initialY,
int xPad, int yPad)
{
SpringLayout layout = new SpringLayout();
int numRows = Math.max(leftComponents.length, rightComponents.length);
// Die konstanten Sprünge, die verwendet werden, um den Abstand zu erzwingen:
Spring xSpring = Spring.constant(initialX);
Spring ySpring = Spring.constant(initialY);
Spring xPadSpring = Spring.constant(xPad);
Spring yPadSpring = Spring.constant(yPad);
Spring negXPadSpring = Spring.constant(-xPad);
// Container und Components erzeugen:
JPanel parent = new JPanel(layout);
for (int i = 0; i < numRows; i++)
{
parent.add(leftComponents[i]);
parent.add(rightComponents[i]);
}
Spring maxEastSpring = layout.getConstraint("East", leftComponents[0]);
for (int row = 1; row < numRows; row++)
{
maxEastSpring = Spring.max(maxEastSpring, layout.getConstraint("East", leftComponents[row]));
}
// Layout für jedes Paar:
SpringLayout.Constraints lastConsL = null;
SpringLayout.Constraints lastConsR = null;
Spring parentWidth = layout.getConstraint("East", parent);
Spring rWidth = null;
Spring maxHeightSpring = null;
Spring rX = Spring.sum(maxEastSpring, xPadSpring);
Spring negRX = Spring.minus(rX);
for (int row = 0; row < numRows; row++)
{
SpringLayout.Constraints consL = layout.getConstraints(leftComponents[row]);
SpringLayout.Constraints consR = layout.getConstraints(rightComponents[row]);
consL.setX(xSpring);
consR.setX(rX);
rWidth = consR.getWidth();
consR.setWidth(Spring.sum(Spring.sum(parentWidth, negRX), negXPadSpring));
if (row == 0)
{
consL.setY(ySpring);
consR.setY(ySpring);
maxHeightSpring = Spring.sum(ySpring, Spring.max(consL.getHeight(), consR.getHeight()));
}
// row > 0:
else
{
Spring y = Spring.sum(Spring.max(lastConsL.getConstraint("South"), lastConsR.getConstraint("South")), yPadSpring);
consL.setY(y);
consR.setY(y);
maxHeightSpring = Spring.sum(yPadSpring, Spring.sum(maxHeightSpring, Spring.max(consL.getHeight(), consR.getHeight())));
}
lastConsL = consL;
lastConsR = consR;
}
// Verbinden des Osten und Sueden des Containers, sodass dieser bevorzugt wird:
SpringLayout.Constraints consParent = layout.getConstraints(parent);
consParent.setConstraint("East", Spring.sum(rX, Spring.sum(rWidth, xPadSpring)));
consParent.setConstraint("South", Spring.sum(maxHeightSpring, yPadSpring));
return parent;
}
// Main:
public static void main(String[] args)
{
int numPairs = 5;
JLabel[] labels = new JLabel[numPairs];
JTextField[] textFields = new JTextField[numPairs];
// Label erstellen (1. Spalte):
labels[0] = new JLabel(" Name");
// labels[0].setFont(labels[0].getFont().deriveFont(Font.PLAIN, 16f));
labels[1] = new JLabel("PLZ und Ort");
labels[2] = new JLabel("Geburts-Datum");
labels[3] = new JLabel("Email-Adtresse");
labels[4] = new JLabel("Telefon-Nummer");
// Text-Feld erstellen (2. Spalte):
for (int i = 0; i < numPairs; i++)
{ textFields[i] = new JTextField(10); }
// Jedes Label mit seinem Textfeld verknüpfen:
for (int i = 0; i < numPairs; i++)
{ labels[i].setLabelFor(textFields[i]); }
// Aufrufen der createForm-Methode:
Container container = createForm(labels, textFields, 5, 5, 5, 5);
JButton saveButton = new JButton("Save");
saveButton.addActionListener(AE ->
{
Path directory = Path.of("E:/NetBeansProjects/SpringLayoutDemo/Daten.txt");
try
{
Files.writeString(directory, "\n", StandardOpenOption.APPEND);
for(int x = 0; x < numPairs; x++)
{ Files.writeString(directory, textFields[x].getText() + "\n", StandardOpenOption.APPEND); }
Files.writeString(directory, "\n", StandardOpenOption.APPEND);
} catch (IOException e) { System.out.println("File not found or no permissions !!!"); }
});
JButton refreshButton = new JButton("Refresh");
refreshButton.addActionListener(AE ->
{
for(int x = 0; x < numPairs; x++)
{ textFields[x].setText(""); }
});
JButton exitButton = new JButton();
exitButton.addActionListener(AE ->
{
System.exit(0);
});
// Das Frame erzeugen, sichtbar machen und in die Mitte des Desktops setzen:
JFrame frame = new JFrame("Daten-Eingabe");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(container);
frame.add(saveButton);
frame.add(refreshButton);
// frame.add(exitButton);
frame.setSize(400, 300);
frame.setVisible(true);
frame.setLocationRelativeTo(null);
}
}