Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Rekomendowane odpowiedzi

Opublikowano

Witam,

 

Problem tkwi w ActionListener. Operując klawiatura w JComboBox event uruchamia się w momencie, gdy operuję strzałkami a chciałbym, aby się aktywował dopiero w momencie wciśnięcia guzika Enter.

W kodzie zakomentowałem alternatywę, którą testowałem ItemListener. Będę wdzięczny za pomoc.

import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

import java.awt.event.ActionEvent;



public class EventE extends JFrame {
	
	private JTextField item1;
	private JTextField item2;
	private JTextField item3;
	private JPasswordField passwordField;
	private JButton but;
	private JComboBox box;
	
	public EventE() {
		super("The Title");
		setLayout(new FlowLayout());
		
		item1 = new JTextField(10);
		add(item1);
		
		item2 = new JTextField("Enter text here");
		add(item2);
		
		item3 = new JTextField("uneditable", 20);
		item3.setEditable(false);
		add(item3);
		
		passwordField = new JPasswordField("pass");
		add(passwordField);
		
		but = new JButton("ok");
		add(but);
		box = new JComboBox();
		box.setModel(new DefaultComboBoxModel(new String[] {"aaa", "fff", "ggg"}));
		box.setEditable(false);
		add(box);
		
		
		
		TheHandler handler = new TheHandler();
		item1.addActionListener(handler);
		item2.addActionListener(handler);
		item3.addActionListener(handler);
		passwordField.addActionListener(handler);
		but.addActionListener(handler);
		but.addActionListener(handler);
//		Dada da = new Dada();
//		box.addItemListener(da);
		
		
		
	}
	
	private class TheHandler implements ActionListener {
		
		public void actionPerformed(ActionEvent event){
			String string = "";
			JComboBox a = (JComboBox)event.getSource();
			String cb = (String)a.getSelectedItem();
			if(event.getSource() == item1 ){
				string = String.format("field 1: %s", event.getActionCommand());
				JOptionPane.showMessageDialog(null,string);
			}
			else if(event.getSource() == item2 ){
				string = String.format("field 2: %s", event.getActionCommand());
				JOptionPane.showMessageDialog(null,string);
			}
			else if(event.getSource() == item3 ){
				string = String.format("field 3: %s", event.getActionCommand());
				JOptionPane.showMessageDialog(null,string);
			}
			else if(event.getSource() == passwordField ){
				string = String.format("field pass is: %s", event.getActionCommand());
				JOptionPane.showMessageDialog(null,string);
				}
			else if(event.getSource() == but ){
				string = String.format("but presed: %s", event.getActionCommand());
				JOptionPane.showMessageDialog(null,string);
			}
			else if( cb == "aaa" || cb == "fff" || cb == "ggg" ){
				string = String.format("box presed: %s", event.getActionCommand());
				JOptionPane.showMessageDialog(null,string);
			}
				
			
			
			
			
				
		}
	}
	

//	private class Dada implements ItemListener {
//	    public void itemStateChanged(ItemEvent ie) {
//	      String s = (String)ie.getItem();
//	      String string = "";
//	      if( s == "aaa" || s == "fff" || s == "ggg" ){
//				string = String.format("box presed: %s", ie.getSource());
//				JOptionPane.showMessageDialog(null,string);
//			}
//	  }
//	}


	

}
import javax.swing.JFrame;

public class MainFrame extends JFrame{

	public static void main(String[] args) {
		EventE e = new EventE();
		e.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		e.setSize(350,150);
		e.setVisible(true);

	}

}

Z góry dzięki za odpowiedź.

 

Opublikowano

Pierwsza sprawa - dla każdego komponentu powinieneś tworzyć osobny hander i przekazywać w konstruktorze to, do czego jest przypisany (nazwę). Aby nie robić szeregu warunków.

Co do samego problemu - powinieneś użyć KeyListener i sprawdzać czy przyciśnięty został enter.

I warto też, jeśli nie jesteś zmuszony do używania Swinga, przejść na javafx. Swing mniej oferuje, jest przestarzały.

708121422388637873334.png

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...