Netbeans Java SE GUI Builder: частная проблема initComponents () - PullRequest
0 голосов
/ 04 июня 2010

Когда я создаю GUI для своего приложения Java SE с помощью построителя GUI Netbeans, он помещает все коды в метод initComponents (), который является закрытым. Я не мог изменить это на публику. Итак, все компоненты доступны только для класса, содержащего пользовательский интерфейс.

Я хочу получить доступ к этим компонентам из другого класса, чтобы я мог писать собственные обработчики событий и все остальное. Самое главное, я хочу отделить мой код GUI и не-GUI друг от друга.

Я могу скопировать, вставить код GUI, а затем сделать его общедоступным вручную, чтобы добиться того, чего я хочу. Но это боль. Я должен сделать часть вручную, когда мне нужно изменить дизайн интерфейса.

Что я пытался сделать:

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

Я новичок в Java. Любая помощь?

Вот примеры классов:

Пользовательский интерфейс (uiFrame.java)

    /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * uiFrame.java
 *
 * Created on Jun 3, 2010, 9:33:15 PM
 */
package barcode;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFileChooser;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import net.sourceforge.barbecue.output.OutputException;

/**
 *
 * @author masnun
 */
public class uiFrame extends javax.swing.JFrame {

    /** Creates new form uiFrame */
    public uiFrame() {
        try {
            try {
                // Set cross-platform Java L&F (also called "Metal")
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(uiFrame.class.getName()).log(Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                Logger.getLogger(uiFrame.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                Logger.getLogger(uiFrame.class.getName()).log(Level.SEVERE, null, ex);
            } catch (UnsupportedLookAndFeelException ex) {
                Logger.getLogger(uiFrame.class.getName()).log(Level.SEVERE, null, ex);
            }
        } finally {
        }


        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        label1 = new javax.swing.JLabel();
        textBox = new javax.swing.JTextField();
        saveButton = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        label1.setFont(label1.getFont().deriveFont(label1.getFont().getStyle() | java.awt.Font.BOLD, 13));
        label1.setText("Type a text:");
        label1.setName("label1"); // NOI18N

        saveButton.setText("Save");
        saveButton.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                saveButtonMousePressed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(56, 56, 56)
                .addComponent(textBox, javax.swing.GroupLayout.PREFERRED_SIZE, 272, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(72, Short.MAX_VALUE))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(154, Short.MAX_VALUE)
                .addComponent(saveButton, javax.swing.GroupLayout.PREFERRED_SIZE, 102, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(144, 144, 144))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(140, Short.MAX_VALUE)
                .addComponent(label1, javax.swing.GroupLayout.PREFERRED_SIZE, 133, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(127, 127, 127))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(label1, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(textBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(saveButton)
                .addContainerGap(193, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>

    @SuppressWarnings("static-access")
    private void saveButtonMousePressed(java.awt.event.MouseEvent evt) {                                        
        JFileChooser file = new JFileChooser();
        file.showSaveDialog(null);
        String data = file.getSelectedFile().getAbsolutePath();
        String text = textBox.getText();
        BarcodeGenerator barcodeFactory = new BarcodeGenerator();
        try {
            barcodeFactory.generateBarcode(text, data);
        } catch (OutputException ex) {
            Logger.getLogger(uiFrame.class.getName()).log(Level.SEVERE, null, ex);
        }


    }                                       
    /**
     * @param args the command line arguments
     */
    // Variables declaration - do not modify
    private javax.swing.JLabel label1;
    private javax.swing.JButton saveButton;
    public javax.swing.JTextField textBox;
    // End of variables declaration
}

Основной класс (Main.java)

package barcode;


import javax.swing.JFrame;


public class Main {

    public static void main(String[] args) {

        JFrame ui = new uiFrame();
        ui.pack();
        ui.show();




    }


}

Ответы [ 4 ]

2 голосов
/ 04 июня 2010

Когда вы щелкаете по любому компоненту в GUI Builder, вы можете изменить уровень доступа. Свойства -> Код -> Модификаторы переменных

1 голос
/ 04 июня 2010

Посмотрите на панель свойств, вы должны увидеть следующее:

Свойства: Связывание: События: Код

Нажмите на код, а затем на модификаторы переменных. Вы можете установить уровень на то, что вам нужно.

Удачи!

0 голосов
/ 05 июня 2010

Вместо создания нового объекта uiFrame я взял новый JFrame. Так что у него не было общедоступной переменной с именем textBox.

0 голосов
/ 04 июня 2010

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

Самое главное, я хочу отделить мой код GUI и не-GUI друг от друга.

Делая компоненты интерфейса более видимыми, вы с большей вероятностью смешаете свой интерфейси не-UI-логика вместе в вашей программе.

Вы можете найти 'java model view controller' и прочитать некоторые статьи, прежде чем продолжить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...