Как показать координаты моей мыши в паре JTextField? - PullRequest
0 голосов
/ 24 апреля 2020

Я новичок здесь, и я новичок в разработке. Моя проблема в том, что у меня есть пара JTextField элементов управления внутри JPanel, который тоже находится внутри JFrame, и в текстовом поле не отображается текст, который я передаю методом, и я не знаю, почему потому что источник этого действительно прост.

ПРОБЛЕМА

Я хочу показать координаты мыши холста, который я получаю, в паре текстовых полей. Этот холст находится внутри фрейма, как панель, которая содержит пару текстовых полей. Я собираюсь поместить здесь источник холста, который в MouseMotionListener является ссылкой.

public void addPosicionPuntero(){        

    addMouseMotionListener(new MouseMotionAdapter(){

        @Override     
        public void mouseMoved(MouseEvent evento){

            x1 = evento.getX();
            y1 = evento.getY(); 
            updateUI();
            panelCoordenadas pC = new panelCoordenadas();
            pC.mostrarCoordenadas(x1,y1);                
            System.out.println(x1 + " --- " + y1);                
        }

        @Override
        public void mouseDragged(MouseEvent evento){                
            mouseMoved(evento);
        }
    });        
} 

хорошо, теперь в другом классе панель, которая включает в себя текстовое поле.

public class panelCoordenadas extends javax.swing.JPanel{    

JTextField txfX = new JTextField("X");
JTextField txfY = new JTextField("Y");


public panelCoordenadas() {  

    this.setSize(100, 100);
    //this.setBounds(60,50,100,60);
    this.setLocation(50, 50);
    this.setBackground(Color.yellow);
    JLabel coordX = new JLabel("coordX");
    JLabel coordY = new JLabel("coordY");
    add(coordX);
    add(coordY);                     

    txfX.setEditable(false);
    txfY.setEditable(false);
    txfX.setSize(40, 20);
    txfY.setSize(40, 20);        
    add(txfX);
    add(txfY);       
}    

public void mostrarCoordenadas(int x, int y){        
    txfX.setText(String.valueOf(x));        
    txfY.setText(String.valueOf(y));
    System.out.println("mostrarCoordenadas = " + x + " --- " + y); 
    updateUI();
}
}

Я поместил System.out, чтобы узнать, получает ли он данные. Данные показываются на экране, но не для текстового поля.

Если кто-нибудь знает, в чем проблема, я рад сообщить мне.

1 Ответ

1 голос
/ 24 апреля 2020

Имена классов НЕ должны начинаться с символа нижнего регистра. Вы видели класс в JDK, который делает? Учитесь на примере.

Так что "panelCoordenadas" должно быть PanelCoordenadas.

updateUI();

Это не нужно. Этот метод используется внутри Swing при изменении LAF. Вам не нужно вызывать его в коде приложения.

JLabel coordX = new JLabel("coordX");
JLabel coordY = new JLabel("coordY");
add(coordX);
add(coordY);    

В конструкторе вашего класса вы создаете компоненты и добавляете компоненты на панель. Это хорошо. Теперь ваша панель может отображать компоненты.

В вашем MouseListener у вас есть:

        panelCoordenadas pC = new panelCoordenadas();
        pC.mostrarCoordenadas(x1,y1);                

Итак, вы создаете панель, но ничего не делаете с панелью. Панель просто сидит в памяти. Вы не добавляете это в кадр. Этот подход неправильный.

Не продолжайте создавать новый экземпляр вашего PanelCoordenadas класса.

Вместо этого в вашем основном классе, где вы создаете другие компоненты, вы создаете экземпляр PanelCoodenadas класс и добавьте его в кадр. Если вы хотите обновить текстовые поля этого экземпляра, вам нужно передать эту переменную в качестве параметра в класс, где вы определяете свой MouseListener.

...