Модификация переменных / других объектов свинга по нажатию кнопки - PullRequest
1 голос
/ 25 июня 2011

Хорошо, поэтому я в основном пытаюсь выполнить некоторые действия с помощью Java Swing JButtons. У меня такое ощущение, что моя проблема - это легкость для опытных программистов, которые обнажают мои «элементарные» проблемы:

Что я хотел бы сделать, так это изменить содержимое другого JComponent и, возможно, изменить некоторые переменные при нажатии кнопки. Это кажется относительно простым, но я хотел бы выполнить это для «уже объявленных» переменных (или уже созданных JComponents)

Везде, где я ищу, я всегда получаю примеры случаев, когда все объявляется с нуля внутри реализации функции ActionPerformed, связанной с конкретным JButton, как здесь:

http://zetcode.com/tutorials/javaswingtutorial/swingevents/ // выше вы можете заметить, что в функции "actionPerformed" они определяют новые переменные, такие как: string / date / locale / stringbuffer

Такое решение никоим образом не удовлетворяет мои потребности. Я хочу изменить / показать переменную, которая была ранее определена из-за щелчка пользователя с использованием функции, принадлежащей другому классу.

Хорошо, возможно, будет более понятно, если я покажу вам, что я хотел бы сделать на примерном исходном коде:

class Number_String {

    public String change_add_MOD (String sss){        
        String str_modified = sss + "_modified";        
        return str_modified;
    }
    public int change_plus1 (int z){        
        int z_modified = z + 1;
        return z_modified;
    }
    public static void main(String[] args) {
        // TODO code application logic here
    }
}

public class probTESTswing extends javax.swing.JFrame {

    public probTESTswing() {
        initComponents();
    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        jLabel1.setText("done");         
        jLabel2.setText(mystring2);        
        jLabel3.setText(ns.change_add_MOD(mystring3));
    }

    public static void main(String args[]) {        

        Number_String ns=null;
        String first_str="myFIRSTstring";        
        String mystring2 = ns.change_add_MOD(first_str);
        String mystring3 = "third_str";

        probTESTswing testing= new probTESTswing();
        testing.setVisible(true);
    }
}

Приветствую всех, кто приложил усилия, чтобы попасть сюда;)

Итак, позвольте мне кратко объяснить:

Основной класс - это "графический интерфейс пользователя", в котором в функции main () я инициализирую некоторые переменные с использованием второго класса, теперь я хочу показать результат "обработки" этих переменных с моим классом Number_String, однако Java отказывается сотрудничать в качестве моего программирования навыкам не хватает фундаментальных знаний, как вы, наверное, заметили.

Вы можете заметить, что я хочу сделать "это" обоими способами: где внутри jButton1ActionPerformed я хочу получить доступ к функции из моего класса Number_String (с использованием 'mystring3'), а также другим способом, где я бы хотел доступ к только что определенной переменной (mystring2)

ЛЮБАЯ ПОМОЩЬ БОЛЬШОЙ ЦЕННОСТИ.

  • Должен ли я "перегрузить" функцию jButton1ActionPerformed (чтобы принимать переменные в качестве параметра)? (да, я знаю, что это личное -> я создал его с дизайнером Netbeans Swing) - Должен ли я разработать свой графический интерфейс вручную, а затем перегрузить их? (не знаю, возможна ли такая перегрузка у тебя)

  • или, может быть, я должен определить некоторый «буфер» (поле для целого числа и поле для строки) для переменных, которые я хочу изменить с использованием моего Jbutton, а затем поместить их в класс «probTESTswing»? (+ написать соответствующие функции для обработки другого класса таким образом, чтобы я использовал его функции?)

  • или, может быть (поскольку моя Number_String не содержит никаких переменных - только функции), переместите эти функции в класс GUI (probTESTswing)

  • ИЛИ, может быть, я должен использовать некоторые указатели / ссылки? (да, похоже, это то, что мне нужно здесь, к сожалению, указатели / ссылки - это то, о чем я ничего не знаю :(, однако я хотел бы изучить это много, так как это кажется обязательным, как я обнаружил сейчас - трудно найти уроки, которые вы , поскольку, насколько я знаю, указателей нет, и я понятия не имею, как использовать ссылки таким образом, чтобы достичь желаемой функциональности - как вы можете видеть из моей проблемы)

  • ИЛИ, может быть, есть совершенно другой способ решения именно таких проблем / случаев?

Пожалуйста, просветите меня, я хотел бы «эффективно» решить мою проблему хорошим способом программирования, чтобы учиться эффективным, оптимальным, правильным и быстрым решениям, однако я отчаянно нуждаюсь в помощи, поэтому любые советы очень ценятся.

Привет

Ответы [ 2 ]

2 голосов
/ 25 июня 2011

Один из подходов состоит в том, чтобы отделить модель данных от представления с использованием шаблона Модель – Представление – Контроллер , обсуждаемого здесь .

Приложение: Проще говоря, вам может понадобиться дать классу ProbTestSwing подходящую переменную-член:

private Number_String ns = new Number_String();
0 голосов
/ 25 июня 2011

JButtons, как и почти все компоненты Swing, имеет множество вещей, называемых «ActionListeners».Эти ActionListener являются классами, которые реализуют интерфейс под названием ... ActionListener!У них есть метод, называемый actionPerformed.Каждый раз, когда нажимается кнопка, он говорит каждому из своих ActionListeners вызывать их actionPerformed функции.Итак, вы даете своей кнопке ActionListener, а затем заставляете ее метод actionPerformed вносить все необходимые изменения.

Это похоже на то, что если бы каждый раз, когда звонил в ваш дверной звонок, вы (как Дж. Баттон) отправляли телефонные звонки всем тем отчаявшимся родственникам, которые думают, что никто никогда не придет к вам в гости.На самом деле, они говорят вам, что будут платить вам деньги каждый раз, когда звонит ваш дверной звонок.Так что звонит дверной звонок (нажав на кнопку), и вы (JButton) звоните своим родственникам (ActionListeners), которые затем каждый платят вам деньги (метод actionPerformed).

Пример в коде:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;


public class Test implements ActionListener{
    int count = 0;
    public static void main(String[] args){
        JFrame frame = new JFrame();
        JButton button = new JButton();

        button.addActionListener(new Test());
        button.setText("I have been clicked 0 times");

        frame.setSize(200, 50);
        frame.add(button);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }

    @Override
    public void actionPerformed(ActionEvent arg0) {
        JButton button = (JButton) (arg0.getSource());
        count++;
        button.setText("I have been clicked "+count+" times");
    }


}
...