Начало Java: передача конструктора через прослушиватель событий - PullRequest
0 голосов
/ 24 марта 2012

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

У меня настроен графический интерфейс, как вы можете видеть.Затем, когда пользователь нажимает на дисплей, я хочу, чтобы программа собирала данные.Затем отправьте его конструктору.

Теперь это школьный проект, поэтому я не могу попросить полный ответ (код), но, надеюсь, кто-нибудь поможет мне лучше понять, что я делаю неправильно,Я получаю сообщение об ошибке: неверный тип возврата - но я знаю, что возвращаемые типы совпадают ... oo;

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

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Project2 extends JFrame {

//Instance Variables
private String sid;
private double length;
private boolean widths;
private String service;


//Declaring GUI Components
private JTextField jtfSSID;
private JTextField jtfLength;
private JTextArea jtaToString;
private JLabel jlblTitle;
private JLabel jlblSSID;
private JLabel jlblLength;
private JLabel jlblToString;
private JButton jbtDisplay;
private JButton jbtClear;
private JRadioButton jrbServiceStand;
private JRadioButton jrbServiceSuper;
private JRadioButton jrbServiceDelux;
private ButtonGroup bgService;
private JCheckBox jcbWStand;
private JCheckBox jcbWExtra;

private JPanel tpanel;
private JPanel ipanel;
private JPanel wpanel;
private JPanel spanel;
private JPanel opanel;

private final int WIDTH = 500;
private final int HEIGHT = 200;

//main method for inst and cust frame
public static void main(String[] args){
    Project2 frame = new Project2();
}

//Constructors + GUI constructs
public Project2(){
    setTitle("Project 2 : Bahia Mar Marina");
    setSize(WIDTH, HEIGHT);
    setLocation(300, 200);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setLayout(new BorderLayout());
    buildTitle();
    buildIdentity();
    buildWidth();
    buildService();
    buildOutput();
    add( tpanel, BorderLayout.NORTH );
    add( ipanel, BorderLayout.WEST);
    add( wpanel, BorderLayout.CENTER );
    add( spanel, BorderLayout.EAST);
    add( opanel, BorderLayout.SOUTH );
    setVisible(true);
}

public Project2(String newSid, double newLength, boolean newWidths, String newService){
    setSid(newSid);
    setLength(newLength);
    isWidths(newWidths);
    setService(newService);
    }

    //-----------------------------setters
    public void setSid(String newSid){
        sid = newSid;
    }
    public void setLength(double newLength){
        if (length <= 20 && length >= 60 || length == 0) {
            length = newLength;
        }
        else {
            JOptionPane.showMessageDialog(null, "Invalid Length! Between 20 - 60 please! Or 0 as a placeholder.");
        }
    }
    public void isWidths(boolean newWidths){
        widths = newWidths;
    }
    public void setService(String newService){
            service = newService;
    }

    //-----------------------------------getters
    public String getSid(){
        return sid;
    }
    public double getLength(){
        return length;
    }
    public boolean getWidths(){
        return widths;
    }
    public String getService(){
        return service;
    }

    //---------------------------------------to string
    public String toString( ){
        String output = "Slip ID: " + sid + " length of " + length + "ft. Wide: " + widths + ".\n-----Service Type: " + service;
        return output;
    }
//build top title
private void buildTitle(){
    tpanel = new JPanel();
    jlblTitle = new JLabel("Bahia Mar Marina");    
    tpanel.add(jlblTitle);



}
//build left ID
private void buildIdentity(){
    ipanel = new JPanel();
    ipanel.setLayout(new GridLayout (2,1));
    jlblSSID = new JLabel("SSID: ");
    jlblLength = new JLabel("Length: ");
    jtfSSID = new JTextField(4);
    jtfLength = new JTextField(4);

    ipanel.setBorder(BorderFactory.createTitledBorder("Identity:"));
    ipanel.add(jlblSSID);
    ipanel.add(jtfSSID);
    ipanel.add(jlblLength);
    ipanel.add(jtfLength);


}
//build center width
private void buildWidth(){
    wpanel = new JPanel();
    wpanel.setLayout(new GridLayout (1,2));
    jcbWStand = new JCheckBox("Standard");
    jcbWExtra = new JCheckBox("Extra-wide");
    wpanel.setBorder(BorderFactory.createTitledBorder("Width:"));
    wpanel.add(jcbWStand);
    wpanel.add(jcbWExtra);
}
//build left service
private void buildService(){
    spanel = new JPanel();
    spanel.setLayout(new GridLayout (3,1));
    jrbServiceStand = new JRadioButton("Standard");
    jrbServiceSuper = new JRadioButton("Superior");
    jrbServiceDelux = new JRadioButton("Deluxe");
    bgService = new ButtonGroup();
    bgService.add(jrbServiceStand);
    bgService.add(jrbServiceSuper);
    bgService.add(jrbServiceDelux);
    spanel.setBorder(BorderFactory.createTitledBorder("Service:"));
    spanel.add(jrbServiceStand);
    spanel.add(jrbServiceSuper);
    spanel.add(jrbServiceDelux);

}
//build bottom output and buttons
private void buildOutput(){
    opanel = new JPanel();
    opanel.setLayout(new GridLayout (2,1));
    jlblToString = new JLabel("Data Output:");

    jtaToString = new JTextArea(2,16);
    jbtDisplay = new JButton("Display!");
    jbtDisplay.addActionListener(new DisplayButtonListener()); 
    jbtClear = new JButton("-Clear-");
    jbtClear.addActionListener(new ClearButtonListener()); 

    opanel.add(jbtDisplay);
    opanel.add(jbtClear);
    opanel.add(jlblToString);
    opanel.add(jtaToString);


}
//Display Listener
private class DisplayButtonListener implements ActionListener{
    public void actionPerformed(ActionEvent e){ 
        sid = jtfSSID.getText();
        length = Double.parseDouble(jtfLength.getText());
        //service
        if(jrbServiceStand.isSelected()){
            service = "Standard";}
        else if(jrbServiceSuper.isSelected()){
            service = "Superior";}
        else if(jrbServiceDelux.isSelected()){
            service = "Deluxe";}
        //widths
        if(jcbWStand.isSelected()){
            widths = false;
        }
        if(jcbWExtra.isSelected()){
            widths = true;
        }

        Project2(sid, length, widths, service); 
    }

}
//Clear Listener
private class ClearButtonListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
        jtfSSID.setText(" ");
        bgService.clearSelection();
        jtfLength.setText(" ");
        jcbWStand.setSelected(false);
        jcbWExtra.setSelected(false);


    }
}}

Итак, просто чтобы быть конкретным и убедиться ... Вот код с ошибкой:

//Display Listener
private class DisplayButtonListener implements ActionListener{
    public void actionPerformed(ActionEvent e){ 
        sid = jtfSSID.getText();
        length = Double.parseDouble(jtfLength.getText());
        //service
        if(jrbServiceStand.isSelected()){
        service = "Standard";}
        else if(jrbServiceSuper.isSelected()){
        service = "Superior";}
        else if(jrbServiceDelux.isSelected()){
        service = "Deluxe";}
        //widths
        if(jcbWStand.isSelected()){
        widths = false;
        }
        if(jcbWExtra.isSelected()){
        widths = true;
    }

    Project2(sid, length, widths, service); //THIS LINE HAS THE ERROR
}

иЯ хочу передать его:

public Project2(String newSid, double newLength, boolean newWidths, String newService){
    setSid(newSid);
    setLength(newLength);
    isWidths(newWidths);
    setService(newService);
    }

Ответы [ 2 ]

1 голос
/ 24 марта 2012

Не думаю, что вы хотите использовать конструктор ... вы хотите вызывать метод внутри Project2, верно? Вы не создаете новый Project2, это правильно?

Я бы не стал создавать новый класс для слушателя. Я бы сделал что-то вроде:

public void newMethod(String newSid, double newLength, boolean newWidths, String newService){
    setSid(newSid);
    setLength(newLength);
    isWidths(newWidths);
    setService(newService);
}

и тогда для вашего слушателя я бы создал анонимного слушателя:

jbtDisplay.addActionListener(
        new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                // do your stuff
                newMethod(sid, length, widths, service);
            }
        }

EDIT:

Основываясь на ваших комментариях к другому ответу, вам нужен второй объект. Проблема, следовательно, является более фундаментальной. Вы пытаетесь объединить свой графический интерфейс с вашим объектом. Вам нужно, чтобы отдельные классы обрабатывали ваш JFrame и логику приложения.

1 голос
/ 24 марта 2012

Эта строка не имеет смысла:

Project2(sid, length, widths, service);

Если вы хотите передать информацию в новый класс с помощью конструктора, то обязательно сделайте это, но для вызова конструктора вам нужно продолжить классимя с ключевым словом new, и вы не хотите называть этот же класс, а скорее другой, верно?Примерно так:

MydisplayDialog displayDialog = new MydisplayDialog(this, sid, length, 
    widths, service);
displayDialog.setVisible(true); 

Где MydisplayDialog - это новый класс, возможно, JDialog, который отображает информацию, которую вы только что собрали.

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