Guten Morgen alle zusammen,
ich möchte gerne eine eigene Komponente für mein Programm schreiben, jedoch haperts dabei ein der einen oder anderen Stelle:
Ich habe mir das so vorgestellt das ich ein JSpinner habe, und wenn ich in das Textfeld klicke/ die Maus reinbewege sich unten drunter eine Liste öffnet, in der die Einträge des JSpinners aufgelistet sind. Jedoch stoße ich dort auf das Problem das mein Mauslistener nicht so ganz reagiert.Woran liegt dies?
mfg. Dagobert
ich möchte gerne eine eigene Komponente für mein Programm schreiben, jedoch haperts dabei ein der einen oder anderen Stelle:
Ich habe mir das so vorgestellt das ich ein JSpinner habe, und wenn ich in das Textfeld klicke/ die Maus reinbewege sich unten drunter eine Liste öffnet, in der die Einträge des JSpinners aufgelistet sind. Jedoch stoße ich dort auf das Problem das mein Mauslistener nicht so ganz reagiert.Woran liegt dies?
Java:
package GUIComponents;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JComponent;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JSpinner;
import javax.swing.SpinnerListModel;
import javax.swing.Timer;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class ChangeText extends JComponent implements ActionListener,
ChangeListener {
private String first;
private Timer change;
private JList expansion;
private JSpinner spinner;
private boolean locked;
public ChangeText(String[] texte, int wechselZeit, boolean extend) {
super();
setLayout(new BorderLayout());
first = texte[0];
spinner = new JSpinner();
RotatingSpinnerListModel rotatingModel = new RotatingSpinnerListModel(texte);
spinner.setModel(rotatingModel);
spinner.setBorder(null);
spinner.addChangeListener(this);
JComponent defEditor = spinner.getEditor() ;
JFormattedTextField txt = ((JSpinner.DefaultEditor)defEditor).getTextField() ;
txt.setHorizontalAlignment(JFormattedTextField.LEFT);
txt.setEditable(false);
txt.setBackground(Color.red);
change = new Timer(wechselZeit, this);
change.start();
add(spinner, BorderLayout.NORTH);
if(extend){
expansion = new JList(texte);
expansion.setEnabled(false);
expansion.setAutoscrolls(true);
spinner.getEditor().addMouseListener(new MouseAdapter(){
public void mouseEntered(MouseEvent e){
System.out.println("Mause drin");
add(expansion, BorderLayout.CENTER);
expansion.setVisible(true);
}
public void mouseExited(MouseEvent e){
System.out.println("Maus raus");
add(expansion, BorderLayout.CENTER);
expansion.setVisible(false);
remove(expansion);
}
public void mouseClicked(MouseEvent e){
if(e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON1){
System.out.println("Edit");
}
}
});
}
setVisible(true);
}
public void setText(String[] texte) {
RotatingSpinnerListModel rotatingModel = new RotatingSpinnerListModel(
texte);
spinner.setModel(rotatingModel);
}
@Override
public void actionPerformed(ActionEvent e) {
String s = (String) spinner.getNextValue();
if (s == null) {
spinner.setValue(first);
} else {
spinner.setValue(spinner.getNextValue());
}
}
@Override
public void stateChanged(ChangeEvent e) {
change.restart();
}
public class RotatingSpinnerListModel extends SpinnerListModel {
int maxIndex;
{
maxIndex = getList().size() - 1;
}
public RotatingSpinnerListModel() {
}
public RotatingSpinnerListModel(java.util.List values) {
super(values);
}
public RotatingSpinnerListModel(Object[] values) {
super(values);
}
// Returns the next legal value of the underlying sequence
public Object getNextValue() {
Object next = super.getNextValue();
if (next == null)
return getList().get(0);
return next;
}
// Returns the previous element of the underlying sequence
public Object getPreviousValue() {
Object prev = super.getPreviousValue();
if (prev == null)
return getList().get(maxIndex);
return prev;
}
}
public static void main(String arg[]) {
JFrame f = new JFrame();
f.setSize(100, 100);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ChangeText txt = new ChangeText(new String[] { "Test1", "Test2",
"Test3" }, 1000, true);
f.add(txt);
f.setVisible(true);
}
}
mfg. Dagobert