- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Card 类,其中包含两个构造函数,正如您在下面的代码中看到的那样。问题是每个 Card 对象接受 2 个字符串和 2 个图像,因为我想保存这些对象,所以我必须将图像的路径保存为字符串,然后检索它们,即 2 个构造函数。然而,使用一些打印语句我发现每当检索一张卡时,都会创建 2 个单独的对象:一个普通的对象和另一个为空的对象。我知道发生这种情况是因为我使用第二个构造函数中的第一个构造函数创建了一张新卡。有没有办法避免这种情况,这样我就不会拥有两个单独的对象?如果可能的话,我想找到一种只使用一个构造函数的方法。这是我的类:
Card.java:
package com.spdesigns.dokkancardspreview.model;
import javafx.scene.image.Image;
public class Card {
private String mName;
private String mDescription;
private Image mMainImage;
private Image mSecondaryImage;
private String mMainImagePath;
private String mSecondaryImagePath;
public Card(String name, String description, Image mainImage, Image secondaryImage) {
mName = name;
mDescription = description;
mMainImage = mainImage;
mSecondaryImage = secondaryImage;
}
public Card(String name, String description , String mainImagePath, String secondaryImagePath) {
Card newCardToAdd = new Card(name,description,new Image(mainImagePath),new Image(secondaryImagePath));
}
@Override
public String toString() {
return mName + " | " + mDescription;
}
public Image getmMainImage() {
return mMainImage;
}
public Image getmSecondaryImage() {
return mSecondaryImage;
}
public String getName() {
return mName;
}
public String getDescription() {
return mDescription;
}
}
home.java:
package com.spdesigns.dokkancardspreview.controllers;
import com.spdesigns.dokkancardspreview.model.Card;
import javafx.beans.property.ListProperty;
import javafx.beans.property.SimpleListProperty;
import javafx.collections.FXCollections;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.ListView;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import java.io.*;
import java.util.List;
import java.net.URL;
import java.util.ArrayList;
import java.util.ResourceBundle;
public class home implements Initializable {
private Card hit = new Card("Hit","Expanding Possibility",
new Image("/images/hit_main.jpg") , new Image("/images/hit_secondary.jpg"));
private Card goku = new Card("Goku SSJ3","Everlasting legend",
new Image("/images/gokussj3_main.jpg") , new Image("/images/gokussj3_secondary.jpg"));
private boolean clickedAgain = false;
@FXML
private Button arrowButton;
@FXML
private ImageView imageView;
@FXML
private ImageView arrow;
@FXML
private ListView listView;
protected List<Card> testingList = new ArrayList<Card>();
protected ListProperty<Card> listProperty = new SimpleListProperty<Card>();
@Override
public void initialize(URL location, ResourceBundle resources) {
addCard(hit);
addCard(goku);
//testingList.add("test2");
listView.itemsProperty().bind(listProperty);
// wrapping our list in an observable list and then pass that observableList to the ListProperty isntance
listProperty.set(FXCollections.observableArrayList(testingList));
// Handle listView selection changes
listView.getSelectionModel().selectedItemProperty().addListener(((observable, oldValue, newValue) -> {
Card currentlySelectedCard = listProperty.get(listView.getSelectionModel().getSelectedIndex());
System.out.printf("ListView item clicked! Value retrieved: %s\n", currentlySelectedCard);
imageView.setImage(new Image(currentlySelectedCard.getmMainImage().impl_getUrl()));
arrow.setVisible(true);
arrowButton.setVisible(true);
}));
arrow.translateYProperty().set(283f);
arrowButton.translateYProperty().set(283f);
arrow.setRotate(180);
arrow.setVisible(false);
arrowButton.setVisible(false);
}
public void handleShowDetails(ActionEvent actionEvent) {
System.out.println("Button Clicked!");
Card currentlySelectedCard = listProperty.get(listView.getSelectionModel().getSelectedIndex());
if(clickedAgain) {
imageView.setImage(new Image(currentlySelectedCard.getmMainImage().impl_getUrl()));
arrow.setRotate(180);
clickedAgain = false;
} else {
imageView.setImage(new Image(currentlySelectedCard.getmSecondaryImage().impl_getUrl()));
arrow.setRotate(360);
clickedAgain = true;
}
}
// Saving
public void exportTo(String fileName) {
try(
FileOutputStream fos = new FileOutputStream(fileName);
PrintWriter writer = new PrintWriter(fos);
){
for(int i =0;i<testingList.size()-1;i++) {
writer.printf("%s|%s|%s|%s\n",testingList.get(i).getName(),testingList.get(i).getDescription(),
testingList.get(i).getmMainImage().impl_getUrl(),testingList.get(i).getmSecondaryImage().impl_getUrl());
System.out.println(testingList.get(i).toString());
}
} catch (IOException ioe) {
System.out.printf("Problem saving: %s/n", fileName);
ioe.printStackTrace();
}
}
// Loading
public void importFrom(String fileName) {
try(
FileInputStream fis = new FileInputStream(fileName);
BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
){
String line;
while((line = reader.readLine()) != null) {
String[] args = line.split("\\|");
this.addCard(new Card(args[0],args[1],args[2],args[3]));
}
} catch (IOException ioe) {
System.out.printf("Problem loading: %S\n" , fileName);
ioe.printStackTrace();
}
int i = 0;
for (Card card : testingList) {
System.out.printf("%s loaded\n",testingList.get(i).toString());
i++;
}
System.out.println("Loading Successful!");
}
public void addCard(Card card) {
testingList.add(card);
}
// DEBUG purposes
public void printTestingList() {
for (Card card : testingList) {
System.out.println(card.toString());
}
}
}
主.JAVA:
package com.spdesigns.dokkancardspreview;
import com.spdesigns.dokkancardspreview.controllers.home;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.io.File;
public class Main extends Application {
private home controller;
private File file = new File("CardsCollection.txt");
@Override
public void start(Stage primaryStage) throws Exception{
FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/home.fxml"));
Parent root = loader.load();
controller = loader.getController();
primaryStage.setTitle("Dokkan Battle Card Preview");
primaryStage.setScene(new Scene(root, 900, 700));
primaryStage.setResizable(false);
// Loading cards
primaryStage.show();
try {
if(!file.exists()) {
file.createNewFile();
}
controller.importFrom("CardsCollection.txt");
} catch (NullPointerException npe) {
System.out.println("Error loading file!");
npe.printStackTrace();
}
}
@Override
public void stop() {
System.out.println("App is closing!");
// Saving before exiting
try {
controller.exportTo("CardsCollection.txt");
} catch (NullPointerException npe) {
System.out.println("Problem saving file!");
npe.printStackTrace();
}
// controller.printTestingList();
}
public static void main(String[] args) {
launch(args);
}
}
最佳答案
改变
public Card(String name, String description , String mainImagePath, String secondaryImagePath) {
Card newCardToAdd = new Card(name,description,new Image(mainImagePath),new Image(secondaryImagePath));
}
至
public Card(String name, String description , String mainImagePath, String secondaryImagePath) {
this(name,description,new Image(mainImagePath),new Image(secondaryImagePath));
}
关于java - 使用两个不同的构造函数创建单个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46299583/
前言: 有时候,一个数据库有多个帐号,包括数据库管理员,开发人员,运维支撑人员等,可能有很多帐号都有比较大的权限,例如DDL操作权限(创建,修改,删除存储过程,创建,修改,删除表等),账户多了,管理
所以我用 Create React App 创建并设置了一个大型 React 应用程序。最近我们开始使用 Storybook 来处理和创建组件。它很棒。但是,当我们尝试运行或构建应用程序时,我们不断遇
遵循我正在创建的控件的代码片段。这个控件用在不同的地方,变量也不同。 我正在尝试编写指令来清理代码,但在 {{}} 附近插入值时出现解析错误。 刚接触 Angular ,无法确定我错过了什么。请帮忙。
我正在尝试创建一个 image/jpeg jax-rs 提供程序类,它为我的基于 post rest 的 Web 服务创建一个图像。我无法制定请求来测试以下内容,最简单的测试方法是什么? @POST
我一直在 Windows 10 的模拟器中练习 c。后来我改用dev C++ IDE。当我在 C 中使用 FILE 时。创建的文件的名称为 test.txt ,而我给出了其他名称。请帮助解决它。 下面
当我们创建自定义 View 时,我们将 View 文件的所有者设置为自定义类,并使用 initWithFrame 或 initWithCode 对其进行实例化。 当我们创建 customUITable
我正在尝试为函数 * Producer 创建一个线程,但用于创建线程的行显示错误。我为这句话加了星标,但我无法弄清楚它出了什么问题...... #include #include #include
今天在做项目时,遇到了需要创建JavaScript对象的情况。所以Bing了一篇老外写的关于3种创建JavaScript对象的文章,看后跟着打了一遍代码。感觉方法挺好的,在这里与大家分享一下。 &
我正在阅读将查询字符串传递给 Amazon 的 S3 以进行身份验证的文档,但似乎无法理解 StringToSign 的创建和使用方式。我正在寻找一个具体示例来说明 (1) 如何构造 String
前言:我对 C# 中任务的底层实现不太了解,只了解它们的用法。为我在下面屠宰的任何东西道歉: 对于“我怎样才能开始一项任务但不等待它?”这个问题,我找不到一个好的答案。在 C# 中。更具体地说,即使任
我有一个由一些复杂的表达式生成的 ILookup。假设这是按姓氏查找人。 (在我们简单的世界模型中,姓氏在家庭中是唯一的) ILookup families; 现在我有两个对如何构建感兴趣的查询。 首
我试图创建一个 MSI,其中包含 和 exe。在 WIX 中使用了捆绑选项。这样做时出错。有人可以帮我解决这个问题。下面是代码: 错误 error LGH
在 Yii 中,Create 和 Update 通常使用相同的形式。因此,如果我在创建期间有电子邮件、密码、...other_fields...等字段,但我不想在更新期间专门显示电子邮件和密码字段,但
上周我一直在努力创建一个给定一行和一列的 QModelIndex。 或者,我会满足于在已经存在的 QModelIndex 中更改 row() 的值。 任何帮助,将不胜感激。 编辑: QModelInd
出于某种原因,这不起作用: const char * str_reset_command = "\r\nReset"; const char * str_config_command = "\r\nC
现在,我有以下由 original.df %.% group_by(Category) %.% tally() %.% arrange(desc(n)) 创建的 data.frame。 DF 5),
在今天之前,我使用/etc/vim/vimrc来配置我的vim设置。今天,我想到了创建.vimrc文件。所以,我用 touch .vimrc cat /etc/vim/vimrc > .vimrc 所
我可以创建一个 MKAnnotation,还是只读的?我有坐标,但我发现使用 setCooperative 手动创建 MKAnnotation 并不容易。 想法? 最佳答案 MKAnnotation
在以下代码中,第一个日志语句按预期显示小数,但第二个日志语句记录 NULL。我做错了什么? NSDictionary *entry = [[NSDictionary alloc] initWithOb
我正在使用与此类似的代码动态添加到数组; $arrayF[$f+1][$y][$x+1] = $value+1; 但是我在错误报告中收到了这个: undefined offset :1 问题:尝试创
我是一名优秀的程序员,十分优秀!