Hi,
Mein Problem ist kurz erklärt.
Ich habe ein GUI erstellt, in das man 3 Eingaben tätigen kann. Einmal die Länge (einer img-Datei), den Dateinamen und einen counter.
Nun ist es so, dass ich Listen von Daten habe. Diese haben bis 22,5 Mio. Elemente. Wurzel von 22,5 Mio sind ca. 4743. Bei einem quadratischen Bild ergibt das die maximale Seitenlänge.
Der Counter ist dafür da um jedes xte Element zu nehmen. Bei einem Counter von 2 wäre es dann: 22,5 Mio./sqrt(2)= max. Seitenlänge des Bildes.
Nun möchte ich, dass wenn man die Zahl für den Counter in das Textfeld eingibt, dass unter dem Feld für die Länge ein kleiner Text steht, der die maximale Länge angibt. Die Formel von oben habe ich ja. Aber wie kann ich es schaffen, damit meine GUI sich automatisch aktualisiert ohne, dass ich einen Button betätige? Also, ich gebe eine Zahl für den Counter in das Textfeld ein und der Hinweis ändert sich direkt.
Mfg
EinfachSö
Code:
Code:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.JLabel;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Font;
import javax.swing.SwingConstants;
import java.awt.Toolkit;
import java.awt.Color;
import java.io.IOException;
public class GUI extends JFrame {
private JPanel contentPane;
private JTextField textLength;
private JTextField textDataName;
private JTextField textCounter;
private JLabel lblLength;
private JLabel lblCounter;
private JLabel lblNameOfData;
private JLabel lblMaxResolution;
/**
* Set the variables for the max Length indicator
*/
private double maxlen = 4743;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GUI frame = new GUI();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public GUI() {
setTitle("UlamSpiral");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 140, 214);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JButton btnCreateImage = new JButton("Create Image");
btnCreateImage.setFont(new Font("Tahoma", Font.PLAIN, 11));
btnCreateImage.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
int length = Integer.parseInt(textLength.getText());
String data = textDataName.getText();
Main temp = new Main();
temp.method(length, data);
}
});
btnCreateImage.setBounds(10, 145, 104, 25);
contentPane.add(btnCreateImage);
//Labels
lblLength = new JLabel("Length:");
lblLength.setBounds(10, 11, 46, 14);
contentPane.add(lblLength);
lblNameOfData = new JLabel("Name of Data:");
lblNameOfData.setBounds(10, 65, 99, 14);
contentPane.add(lblNameOfData);
lblCounter = new JLabel("Counter:");
lblCounter.setBounds(10, 105, 104, 14);
contentPane.add(lblCounter);
lblMaxResolution = new JLabel("(Max.Length:)");
lblMaxResolution.setFont(new Font("Tahoma", Font.PLAIN, 9));
lblMaxResolution.setForeground(Color.RED);
lblMaxResolution.setBounds(10, 51, 104, 14);
contentPane.add(lblMaxResolution);
//Text-Felder
textLength = new JTextField();
textLength.setBounds(10, 28, 104, 20);
contentPane.add(textLength);
textLength.setColumns(10);
textDataName = new JTextField();
textDataName.setBounds(10, 82, 104, 20);
contentPane.add(textDataName);
textDataName.setColumns(10);
textCounter = new JTextField();
textCounter.setText("1");
textCounter.setBounds(10, 122, 104, 20);
contentPane.add(textCounter);
textCounter.setColumns(10);
/**
* Calculate the Max Length and show it
*/
}
}
Möglicher Code für das "Feature"
Code:
try
{
int counter = Integer.parseInt(textCounter.getText());
double temp = maxlen/Math.sqrt(counter);
lblMaxResolution.setText("(Max.Length:" + (int) temp + ")");
}
catch(NumberFormatException e)
{
System.err.println(e);
}