gpt4 book ai didi

java - 开始Java : passing to a constructor thru event listener

转载 作者:行者123 更新时间:2023-12-02 07:54:17 25 4
gpt4 key购买 nike

所以,我想要完成的是将 GUI 数据发送到构造函数以设置一些新实例。但我不太确定如何实现这一点。老实说,我什至不知道我所做的事情是否被允许,但是伙计,如果这样的话那就很容易了。

如您所见,我设置了一个 GUI。然后,当用户单击显示时,我希望程序收集数据。然后将其发送给构造函数。

现在,这是一个学校项目,所以我不能真正要求完整的答案(代码),但希望有人可以帮助我更好地理解我做错了什么。我得到的编译器错误是 -返回类型无效 - 但我知道返回类型匹配... o-o;

我将提供您需要的任何其他信息。如果我可以稍微修改一下这段代码,让编译器更容易理解,就好像我整个构造函数都做错了一样,请让我知道。无论如何,我希望在编码时有更好的习惯。

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);
}

最佳答案

这一行没有意义:

Project2(sid, length, widths, service);

如果您想通过构造函数将信息传递给新类,那么当然可以这样做,但是要调用构造函数,您需要使用 new 关键字来处理类名,并且您不想调用同一个类,而是调用不同的类,对吧?像这样的东西:

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

其中 MydisplayDialog 是一个新类,可能是 JDialog,用于显示您刚刚收集的信息。

关于java - 开始Java : passing to a constructor thru event listener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9847207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com