그래서, 새로운 인스턴스를 설정하기 위해 생성자에게 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);
}
와우. 괜찮아. 그건 의미가 있습니다. 그래도 새 창에 표시하는 것이 아니라 텍스트 필드 영역에 toString을 표시하고 싶습니다. : o하지만 나는 네가하는 말을 본다. 그래서, 아마도 ... 'Project2 newBoatSlip = 새 Project2 (sid, 길이, 너비, 서비스); jtaToString.setText (ToString()); ' –
@ 대니얼 : 원하는 것은 JTextArea에 표시하고, 그 다음에 setText (...를 통해 JTextArea에 문자열을 전달하는 것입니다.)'메소드를 사용하거나 JTextArea에 append (...) 메소드를 통해 String을 추가 할 수있다. 새 Project2 개체를 만들거나 해당 생성자를 호출하지 마십시오. 다시 말하지만, 그건 말이 안됩니다. 그런데 원래 질문에서 JTextArea의 내용을 표시하려고한다고 언급해야합니다. 우리가 이런 것들을 추측하게 만드는 데는 아무런 의미가 없습니다. –
내가 그 일을 할 수 있는지 모르겠다. 나는이 프로젝트의 지시 사항을보다 잘 설명해야했다. :/ '보트 슬립 오브젝트를 생성하는 데이 정보를 사용해야합니다. 그런 다음 보트 슬립 클래스에서 toString() 메서드를 호출하고 출력을 JTextArea의 사용자에게 표시해야합니다. 출력물은 JTextArea에 깔끔하게 맞아야하며 단어가 함께 작동하거나 정중선이 깨지지 않으면 쉽게 읽을 수 있어야합니다. 전체 크레디트를 받으려면 클래스에 인스턴스를 만들고 메소드를 호출하여 GUI에 출력을 생성해야합니다. ' –