Hey, ich habe ein recht leichtes Problem, dass mich aber gerade etwas zum verzweifeln bringt.
Ich hatte vor mit eine kleine Stoppuhr zu programmieren, die ich in 2 Packages aufteile. Zwecks der Übersichtlichkeit wollte ich in einem Package eine Klasse erstellen, die die Main-Methode besitzt und die GUI erzeugt und in einem anderen Package die eigentliche Gui erstellen.
Gut, ich denke für mein problem ist es am einfachsten, wenn ich den Code demonstriere:
Zunächst mal die GUI Klasse:
Wenn ich hier die Main-Methode auskommentiere, dann wird die GUI wie gewünscht mit allen Funktionalitäten ausgeführt.
Nun möchte ich die aber in einer anderen Klasse ausführen:
Hier der Code:
Hierbei wird nur ein leeres Fenster angezeigt. Würde mich über Hilfen freuen, da ich vermute, dass es nur eine Kleinigkeit ist, die ich nicht bedacht habe.
Liebe Grüße,
Braniac
Ich hatte vor mit eine kleine Stoppuhr zu programmieren, die ich in 2 Packages aufteile. Zwecks der Übersichtlichkeit wollte ich in einem Package eine Klasse erstellen, die die Main-Methode besitzt und die GUI erzeugt und in einem anderen Package die eigentliche Gui erstellen.
Gut, ich denke für mein problem ist es am einfachsten, wenn ich den Code demonstriere:
Zunächst mal die GUI Klasse:
Code:
package de.zeituhr.gui;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class Zeitfenster extends JFrame implements ActionListener, ChangeListener{
/**
*
*/
public static final long serialVersionUID = 1L;
public JFrame frame = new JFrame("Zeitfenster");
public JButton exitButton;
public JButton startButton;
public JLabel minutesLabel;
public JLabel remainingLabel;
public JLabel remainingMinLabel;
public JLabel timeToMsgLabel;
public JSlider minutesSlider;
public JTextField minutesTextField;
public Zeitfenster(){
initGui();
}
public void initGui() {
frame.setSize(550, 260);
frame.setLocationRelativeTo(frame);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(null);
timeToMsgLabel = new JLabel("Zeit bis zur Meldung:");
timeToMsgLabel.setBounds(0, 10, 300, 20);
timeToMsgLabel.setFont(new Font("Arial", Font.ITALIC, 20));
remainingMinLabel = new JLabel("Sekunden");
remainingMinLabel.setBounds(360, 40, 110, 30);
remainingMinLabel.setFont(new Font("Arial", Font.PLAIN, 20));
remainingLabel = new JLabel("Verbleibende Zeit:");
remainingLabel.setBounds(0, 100, 250, 30);
remainingLabel.setFont(new Font("Arial", Font.PLAIN, 20));
minutesLabel = new JLabel("");
minutesLabel.setBounds(170, 100, 180, 30);
minutesLabel.setFont(new Font("Arial", Font.PLAIN, 20));
minutesSlider = new JSlider(JSlider.HORIZONTAL, 0, 60, 9);
minutesSlider.setMajorTickSpacing(10);
minutesSlider.setMinorTickSpacing(2);
minutesSlider.setPaintTicks(true);
minutesSlider.setPaintLabels(true);
minutesSlider.setBounds(0, 50, 300, 50);
minutesSlider.createStandardLabels(1);
minutesSlider.addChangeListener(this);
minutesTextField = new JTextField(20);
minutesTextField.setBounds(300, 45, 50, 30);
minutesTextField.addActionListener(this);
startButton = new JButton("Start");
startButton.setBounds(300, 140, 80, 30);
startButton.addActionListener(this);
exitButton = new JButton("Beenden");
exitButton.setBounds(400, 140, 100, 30);
exitButton.addActionListener(this);
frame.add(minutesSlider);
frame.add(timeToMsgLabel);
frame.add(minutesTextField);
frame.add(remainingMinLabel);
frame.add(remainingLabel);
frame.add(minutesLabel);
frame.add(startButton);
frame.add(exitButton);
frame.setVisible(true);
}
// public static void main(String[] args) {
// // TODO Auto-generated method stub
//
// Zeitfenster fenster = new Zeitfenster();
//
// }
@Override
public void actionPerformed(ActionEvent arg0) {
if(arg0.getSource() == exitButton){
System.exit( 0 );}
if(arg0.getSource() == minutesTextField){
try {
minutesSlider.setValue( Integer.parseInt( minutesTextField.getText() ) );
}
catch ( NumberFormatException e ) { }
}
if(arg0.getSource() == startButton){
startButton.setEnabled( false );
final long start = System.currentTimeMillis();
final long end = start + minutesSlider.getValue() * 1000;
final javax.swing.Timer timer = new javax.swing.Timer( 100, null );
timer.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent e ) {
long now = System.currentTimeMillis();
if ( now >= end )
{
startButton.setEnabled( true );
JOptionPane.showMessageDialog( null, "BING!" );
timer.stop();
}
else
minutesLabel.setText( (end - now) / 1000 + " Sekunden" );
if((end - now)/1000 < 10){
minutesTextField.setText("" + minutesLabel.getText().substring(0, 1));}
else{
minutesTextField.setText("" + minutesLabel.getText().substring(0, 2));}
try {
minutesSlider.setValue( Integer.parseInt( minutesTextField.getText() ) );
}
catch ( NumberFormatException e1 ) { }
}
;
} );
timer.start();
}
}
@Override
public void stateChanged(ChangeEvent arg0) {
if(arg0.getSource() == minutesSlider){
minutesTextField.setText("" + minutesSlider.getValue());
}
}
}
Wenn ich hier die Main-Methode auskommentiere, dann wird die GUI wie gewünscht mit allen Funktionalitäten ausgeführt.
Nun möchte ich die aber in einer anderen Klasse ausführen:
Hier der Code:
package de.zeituhr.ui;
import de.zeituhr.gui.Zeitfenster;
public class Launch {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Zeitfenster fenster = new Zeitfenster();
}
}
Hierbei wird nur ein leeres Fenster angezeigt. Würde mich über Hilfen freuen, da ich vermute, dass es nur eine Kleinigkeit ist, die ich nicht bedacht habe.
Liebe Grüße,
Braniac