Added the ability to display pictures

android-scanner
VladimirEliTokarev 2016-10-03 20:11:42 +03:00
parent 91b0d947f2
commit 21867fb5da
7 changed files with 133 additions and 89 deletions

View File

@ -7,8 +7,7 @@ import meerkat.protobuf.BallotQuestionUIElementOuterClass;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.awt.image.WritableRaster;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
@ -27,13 +26,15 @@ public class Main extends Application {
* @throws IOException
*/
private byte[] GetData(String filepath) throws IOException {
File imgPath = new File(filepath);
BufferedImage bufferedImage = ImageIO.read(imgPath);
byte[] imageInByte;
BufferedImage originalImage = ImageIO.read(new File(filepath));
WritableRaster raster = bufferedImage .getRaster();
DataBufferByte data = (DataBufferByte) raster.getDataBuffer();
return ( data.getData() );
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(originalImage, "png", baos);
baos.flush();
imageInByte = baos.toByteArray();
baos.close();
return imageInByte;
}
/**
@ -65,9 +66,9 @@ public class Main extends Application {
.setAnswers(BallotQuestionUIElementOuterClass.UIAnswers.newBuilder()
.setAnswersType(2)
.setAnswers(BallotQuestionUIElementOuterClass.ListOfAnswers.newBuilder()
.addAnswers(ByteString.copyFrom(GetData("F:\\vova\\meerkat\\meerkat-java\\voting-booth-gui\\src\\main\\resources\\images\\GeorgeBush.png")))
.addAnswers(ByteString.copyFrom(GetData("F:\\vova\\meerkat\\meerkat-java\\voting-booth-gui\\src\\main\\resources\\images\\MichaelJackson.png")))
.addAnswers(ByteString.copyFrom(GetData("F:\\vova\\meerkat\\meerkat-java\\voting-booth-gui\\src\\main\\resources\\images\\AntonioBanderass.jpg")))))
.addAnswers(ByteString.copyFrom(GetData("/F:/vova/meerkat/meerkat-java/voting-booth-gui/src/main/resources/images/GeorgeBush.png")))
.addAnswers(ByteString.copyFrom(GetData("/F:/vova/meerkat/meerkat-java/voting-booth-gui/src/main/resources/images/MichaelJackson.png")))
.addAnswers(ByteString.copyFrom(GetData("/F:/vova/meerkat/meerkat-java/voting-booth-gui/src/main/resources/images/AntonioBanderass.png")))))
.setRandomizeListOrder(true).build();
return config;

View File

@ -1,19 +1,115 @@
package meerkat.voting.gui.select_candidate_by_picture;
import com.google.protobuf.ByteString;
import javafx.embed.swing.SwingFXUtils;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.control.CheckBox;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
import meerkat.protobuf.BallotQuestionUIElementOuterClass;
/**
* Created by Vladimir Elieze Tokarev on 10/3/2016.
* This object updates the voisual representations of the voters answers
*/
class PicturesAnswersUpdater {
private Stage currentStage;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
PicturesAnswersUpdater(Stage primaryStage){
/**
* Created by Vladimir Eliezer Tokarev on 10/3/2016.
* This object updates the visual representations of the voters binaryDatas
*/
class PicturesAnswersUpdater implements EventHandler{
private Stage currentStage;
private int columIndex;
PicturesAnswersUpdater(Stage primaryStage) {
this.currentStage = primaryStage;
this.columIndex = 0;
// The lookup works only after the css have been randered
this.currentStage.getScene().getRoot().applyCss();
}
public void UpdateAnswers(BallotQuestionUIElementOuterClass.BallotQuestionUIElement question){
/**
* Gets all the binaryDatas from the ballot ui question and puts them into the binaryDatas container
*
* @param question
*/
void UpdateAnswers(BallotQuestionUIElementOuterClass.BallotQuestionUIElement question) {
this.RemoveAllAnswers();
for (ByteString bytesAnswer : question.getAnswers().getAnswers().getAnswersList()) {
try {
this.AddAnswer(bytesAnswer);
} catch (IOException e) {
e.printStackTrace();
}
}
this.currentStage.show();
}
/**
* Gets the container of the binaryDatas
*
* @return GridPane object
*/
private GridPane GetAnswersContainer() {
return (GridPane) this.currentStage.getScene().lookup("#AnswersGridPane");
}
/**
* Remove all previous binaryDatas from the container
*/
private void RemoveAllAnswers() {
this.GetAnswersContainer().getChildren().removeAll();
}
/**
* Creates binaryData element which is grid pane with the binaryData and check box
*
* @param binaryData string binaryData to show to the voter
* @return GridPane which contains string and check box
*/
private GridPane GetAnswerElement(ByteString binaryData) throws IOException {
GridPane gridPane = new GridPane();
BufferedImage bufferedImage = ImageIO.read(binaryData.newInput());
Image image = SwingFXUtils.toFXImage(bufferedImage, null);
ImageView imageView = new ImageView();
imageView.setImage(image);
CheckBox checkBox = new CheckBox();
checkBox.setOnAction(this);
gridPane.add(imageView, 2 , 1);
gridPane.add(checkBox, 2, 2);
gridPane.setPrefSize(100, 100);
gridPane.setPadding(new Insets(10));
return gridPane;
}
/**
* Adds the GridPane binaryData to the panel
*
* @param binaryData the binaryData string to represent to the user
*/
private void AddAnswer(ByteString binaryData) throws IOException {
GridPane container = this.GetAnswersContainer();
GridPane newAnswer = this.GetAnswerElement(binaryData);
container.addColumn(1);
this.columIndex++;
container.add(newAnswer, this.columIndex, 0);
this.currentStage.show();
}
@Override
public void handle(Event event) {
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -123,9 +123,9 @@
</GridPane>
<GridPane GridPane.rowIndex="1">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="144.0" minWidth="10.0" prefWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="469.0" minWidth="10.0" prefWidth="469.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="192.0" minWidth="10.0" prefWidth="63.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="144.0" minWidth="10.0" prefWidth="25.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="552.0" minWidth="10.0" prefWidth="548.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="192.0" minWidth="10.0" prefWidth="25.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="57.0" minHeight="0.0" prefHeight="0.0" vgrow="SOMETIMES" />
@ -135,73 +135,20 @@
<children>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="1">
<center>
<GridPane BorderPane.alignment="CENTER">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="134.0" minHeight="10.0" prefHeight="134.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="76.0" minHeight="10.0" prefHeight="32.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<BorderPane fx:id="picture_0" prefHeight="200.0" prefWidth="200.0" >
<center>
<ImageView BorderPane.alignment="CENTER">
<image>
<Image url="@/images/profile.png" />
</image>
</ImageView>
</center>
</BorderPane>
<BorderPane fx:id="picture_1" prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" >
<center>
<ImageView BorderPane.alignment="CENTER">
<image>
<Image url="@/images/profile.png" />
</image>
</ImageView>
</center>
</BorderPane>
<BorderPane fx:id="picture_2" prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" >
<center>
<ImageView BorderPane.alignment="CENTER">
<image>
<Image url="@/images/profile.png" />
</image>
</ImageView>
</center>
</BorderPane>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="1">
<top>
<Label fx:id="name0" text="Name" BorderPane.alignment="CENTER" >
<font>
<Font size="15.0" />
</font>
</Label>
</top>
</BorderPane>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="1">
<top>
<Label fx:id="name1" text="Name" BorderPane.alignment="CENTER">
<font>
<Font size="15.0" />
</font>
</Label>
</top>
</BorderPane>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="1">
<top>
<Label fx:id="name2" text="Name" BorderPane.alignment="CENTER">
<font>
<Font size="15.0" />
</font>
</Label>
</top>
</BorderPane>
</children>
</GridPane>
<ScrollPane prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="151.0" prefWidth="1000.0">
<children>
<Pane prefHeight="151.0" prefWidth="1000.0">
<children>
<GridPane fx:id="AnswersGridPane" prefHeight="151.0" prefWidth="1000.0">
</GridPane>
</children>
</Pane>
</children>
</AnchorPane>
</content>
</ScrollPane>
</center>
</BorderPane>
</children>