Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • tie/ohj2/ve/2025/kevat/ohj2
  • hasemajo/ohj2
  • nikaleko/ohj2
  • tntvanha/ohj2
  • lemaline/ohj2
  • rintahe/ohj2
  • tersaton/ohj2
  • tornhale/ohj2
  • pjyypiix/ohj-2
  • aneejoko/ohj2
  • reponaw/ohj2
  • saarian/ohj2
  • niemimm/ohj2
  • jppaasww/ohj2-2025k
  • ssniinim/ohj2
  • niememan/ohj2
  • milimaas/ohj2
  • kallmovu/ohj2
  • adaoliro/ohj2
  • tojuhann/ohj2
  • vevejuha/ohj2
  • mieikrla/ohj2
  • miankort/ohj2
  • saeteppo/ohj2
  • saelripa/ohj2
  • saniitty/ohj2
  • nsmietyt/ohj2
  • mikkolto/ohj2
  • mmuhonen/ohj2k25
  • saukkota/ohj-2-ht
  • eenorta/ohj2
  • oapaaso/ht-2
  • eeeeoino/ohj2
  • hietmaem/ohj2
  • vvlaspa/ohj2ht
  • lalaajal/ohj2
  • pepartyy/ohj2
  • loukovjv/ohj2
  • vihtkaan/ohj2
  • annelinu/ohjelmointi2
  • lehtikmi/ohj2
  • ihakalel/ohj2
  • aichinos/ohj2
  • lahteela/ohj-2-ht
  • pellrata/ohj2
  • iljinisa/ohj2
  • nkeuren/ohj2
  • hiltunma/ohj2
  • esshelkr/ohj2
  • vianelo/ohj2
  • kousaepw/ohj-2-ht
  • amheikkz/ohj2
  • jatirkko/ohj2
  • akharine/ohj2
  • rlokilja/ohj2
  • eskrliim/ohj2
  • masakoiv/ohj2
  • toivjope/ohj2
  • sasalons/ohj2
  • hirvepjw/ohj2
  • lajoveps/vuororekisteri
  • lelitirr/ohj-225
  • juhsansa/ohj2
  • essmarpe/ohj2
  • lehtlrvt/ohj2
  • setilus/ohj2
  • julipits/ohj2
  • kivistve/ohj2
  • erpajala/ohj2
  • pslohi/ohj2
  • sediiv/ohj2
  • jovesaar/ohj2
  • jutaalko/ohj2
  • valltoha/ohj2
  • ruotvive/ohj2ht
  • kkvalke/ohj2
  • aetuukka/espanjakohderekisteri
  • pdanilei/ohj2ht
  • lahtlule/ohj2
  • jaemvahu/ohj2
  • kantsiii/ohj2
  • tototuru/ohj2
  • elmotabe/ohj2
  • sutinele/ohj2
  • vepajuna/ohj2
  • tornittu/reseptilista
  • sasoleht/ohj2
  • eemjorto/ohj2
  • gagolzar/ohj2
  • sievanee/ohj2
  • nobekail/ohj2
  • mamiparv/ohj2
  • halolpvz/ohj2
  • tukilo/ohj2
  • mmleppis/ohj2
  • tmruisma/ohj2
  • aajataip/ohj-2
  • salonevs/ohj-2
  • ygulusen/ohj2
  • saarakka/ohj2
  • eakoskix/ohj2
  • lamminm/ohj2ht
  • sellmmv/salibandynpelaajarekisteri
  • tuoskopp/ohj2
  • haarates/ohj-2
  • jormlsuu/ohj2
  • lihiauka/ohj2
  • eeemkarv/ohj2
  • uekolehm/ohj2
  • smkolari/ohj-2-a
  • spicjrxz/ohj2
  • maalvirt/ohj-2-ht
  • hietaolo/ohj2ht
  • rtmatilt/ohj2
  • veevjoen/ohj2
  • lainejee/ohj2
  • pohtojoj/tuotelistaaja
  • jokayli/ohj2
  • sulasaal/ohj2
  • kalloupe/ohj2
  • apeshhhh/ohj2
  • kopperp/ohj2
  • garammtu/ohj2
  • ettalaes/ohj2
  • rajanije/ohj2
  • timovaan/ohj2
  • mkvuonos/ohj2
  • tuomiluu/ohj2
  • konttijm/ohj2
  • palolala/ohj2
  • vejokauk/ohj2
  • peihanus/ohj2
  • itsario/ohj2
  • hejumivu/ohj2
  • isojarto/ohj2
  • pirinpot/ohj2ht
  • oihietan/ohj2
  • niemhizz/ohj2
  • oparve/ohj2
  • truhtejo/ohj-2-ht
  • malineps/ohj-2-pelivalikoima
  • kylkii/ohj2
  • emigrank/ohj2
  • samavakk/ohj2
  • lausofla/ohj2
  • arossors/ohj-2-2
  • nurmsajo/ohj2
  • mattarma/ohj2
  • akjuhesa/ohj-2-ht
  • ovevalka/ohj2
  • lequyanh/ohj-2-ht
  • jasyvays/ohj2
  • lindtope/ohj2
  • kaipainm/ohj2
  • peillips/ohj2
  • miwamich/ohj2
  • anpahypp/ohj2harkka
  • kreenk/ohj2
  • iiaumaoi/ohj2
  • jmsutizy/ohj-2-25
  • conrcsir/ohj2
  • palaakho/ht-metsastyspaivakirja
  • makelkjt/ohj2
  • jooantni/ohj2
  • ttkelaw/ohj-2-2025-k
  • koivishe/kuntohalli-oy
  • laleiho/harjoitustyo-ohj-2
  • joolmatt/ohj2-ht
  • akrasa/ohj2
  • rikretel/ohj-2-ht
  • vuorelma/ohj2
171 results
Show changes
Commits on Source (208)
Showing
with 416 additions and 1 deletion
......@@ -71,4 +71,4 @@ nb-configuration.xml
##############################
## OS X
##############################
.DS_Store
\ No newline at end of file
.DS_Store
### IntelliJ IDEA ###
out/
SearchableObject/
!**/src/main/**/out/
!**/src/test/**/out/
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store
File added
/* JavaFX CSS - Leave this comment until you have at least create one rule which uses -fx-Property */
\ No newline at end of file
package fxesimerkki;
import fi.jyu.mit.fxgui.DynamicComboBox;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import java.net.URL;
import java.util.ResourceBundle;
/**
* @author konst
* @version 20.2.2025
*/
public class esimerkkiGUIController implements Initializable {
@FXML
private DynamicComboBox laatikko;
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
}
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<?import fi.jyu.mit.fxgui.DynamicComboBox?>
<?import java.lang.String?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<BorderPane xmlns="http://javafx.com/javafx/23.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fxesimerkki.esimerkkiGUIController">
<center>
<GridPane prefHeight="134.0" prefWidth="170.0" BorderPane.alignment="CENTER">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Label text="Esimerkki" />
<DynamicComboBox fx:id="laatikko" editable="true" promptText="valitse" GridPane.rowIndex="1">
<GridPane.margin>
<Insets />
</GridPane.margin>
<sisalto>
<String fx:value="Antti" />
<String fx:value="Mikko" />
<String fx:value="Aapo" />
<String fx:value="Kalle" />
</sisalto>
</DynamicComboBox>
</children>
</GridPane>
</center>
</BorderPane>
package fxesimerkki;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.fxml.FXMLLoader;
/**
* @author konst
* @version 20.2.2025
*/
public class esimerkkiMain extends Application {
@Override
public void start(Stage primaryStage) {
try {
FXMLLoader ldr = new FXMLLoader(getClass().getResource("esimerkkiGUIView.fxml"));
final Pane root = ldr.load();
//final esimerkkiGUIController esimerkkiCtrl = (esimerkkiGUIController)ldr.getController();
Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("esimerkki.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.setTitle("esimerkki");
primaryStage.show();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @param args Ei käytössä
*/
public static void main(String[] args) {
launch(args);
}
}
\ No newline at end of file
DynamicComboBox/kuvat/Import.png

44.8 KiB

DynamicComboBox/kuvat/LaatikkoKoodissa.png

87.1 KiB

DynamicComboBox/kuvat/LaatikkoSB.png

227 KiB

DynamicComboBox/kuvat/LaatikkoValinta.png

103 KiB

DynamicComboBox/kuvat/esimerkki.png

6.15 KiB

DynamicComboBox/kuvat/filterointiEsimerkki.png

4.22 KiB

DynamicComboBox/kuvat/uusiValinta.png

32.1 KiB

DynamicComboBox/kuvat/uusiValintaLaatikossa.png

5.88 KiB

<?xml version="1.0" encoding="UTF-8"?>
<?import fi.jyu.mit.fxgui.DynamicComboBox?>
<?import javafx.collections.FXCollections?>
<?import java.lang.String?>
<DynamicComboBox xmlns="http://javafx.com/javafx/21"
xmlns:fx="http://javafx.com/fxml/1"
fx:id="dynamicComboBox" editable="true">
<items>
<FXCollections fx:factory="observableArrayList">
<String fx:value="Item 1"/>
<String fx:value="Item 2"/>
<String fx:value="Item 3"/>
</FXCollections>
</items>
</DynamicComboBox>
\ No newline at end of file
package fi.jyu.mit.fxgui;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.ListProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleListProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.Alert;
import javafx.scene.control.ButtonBar;
import javafx.scene.control.ButtonType;
import javafx.scene.control.ComboBox;
import javafx.scene.input.KeyEvent;
import java.util.*;
/**
* Oma versio ComboBox containerista, sisältää haun ja uuden lisäyksen tulkinnan
*/
public class DynamicComboBox extends ComboBox<java.lang.String> {
private final ListProperty<String> sisalto = new SimpleListProperty<>(FXCollections.observableArrayList());
/**
* Attribuutti items sisältää kaiken comboxin sisällön
*/
private BooleanProperty suodattaminen = new SimpleBooleanProperty(true);
private BooleanProperty dynaaminenLisays = new SimpleBooleanProperty(true);
public DynamicComboBox() {
super();
this.getEditor().addEventHandler(KeyEvent.KEY_TYPED, this::haku);
this.getEditor().setOnAction(_ -> tutkiValinta());
this.sisalto.addListener((_, _, newValue) ->asetaSisalto(newValue) );
}
/**
* Seuraavat metodit ovat kaikki sisallon lisäämistä/asettamsita varten
* Huom ylikirjoittaa kaiken mikä on scenebuilderissa laitettu, jos haluat lisätä myöhemmin koodissa
* asioita käytä lisaaSisaltoa() metodia
* @param sisalto mikä merkkijono/sisalto kokoelma comboboxiin laitetaan
*/
public void asetaSisalto(String[] sisalto) {
this.getItems().setAll(sisalto);
this.sisalto.setAll(Arrays.asList(sisalto));
}
public void asetaSisalto(List<String> sisalto) {
this.getItems().setAll(sisalto);
this.sisalto.setAll(sisalto);
}
/**
* asettaa sisältöä DynamicComboBoxiin
* tarvitaan myös scenebuilderin yhteensopivuuteen
*/
@FXML
public void asetaSisalto(ObservableList<String> sisalto) {
this.getItems().setAll(sisalto);
this.sisalto.set(sisalto);
}
/**
* palauttaa sisallon ListProperty oliona
* tarivtaan myös scenebuilderiin
*/
@FXML
public ListProperty<String> sisaltoProperty() {
return sisalto;
}
/**
* palauttaa sisällön ObservableList oliona
* tarivtaan myös scenebuilderiin
*/
@FXML
public ObservableList<String> getSisalto() {
return sisalto.get();
}
/**
* asettaa dynaamisen lisäyksen tilan
*/
@FXML
public void setDynaaminenLisays(boolean t) {
this.dynaaminenLisays.set(t);
}
/**
* palauttaa dynaamisen lisäyksen tilan
*/
@FXML
public boolean getDynaaminenLisays() {
return dynaaminenLisays.get();
}
/**
* asettaa sisällön suodattamisen tilan
*/
@FXML
public void setSuodattaminen(boolean s) {
this.suodattaminen.set(s);
}
/**
* palauttaa sisällön suodattamisen tilan
*/
@FXML
public boolean getSuodattaminen() {
return suodattaminen.get();
}
/**
* lisää sisältöä comboboxiin
*
* @param uusi merkkijono, joka lisätään
*/
public void lisaaSisaltoa(String uusi) {
this.getItems().add(uusi);
this.sisalto.add(uusi);
}
/**
* Vallinan tutkimis metodi Tutkii mitä käyttäjä on sijoittanut ComboBoxiin, jos on uusi valinta,
* niin kysytään halutaanko se lisätä valintoihin. Instanssi pohjainen lisäys, jos lisäys halutaan
* lopulliseksi tulee se tehdä itse
*/
private void tutkiValinta() {
if(!this.dynaaminenLisays.get()) {
return;
}
java.lang.String valinta = this.getEditor().getText();
if (valinta == null) {
return;
}
valinta = valinta.trim();
if (valinta.isEmpty()) {
return;
}
// katsotaan löytyykö valinta
boolean loytyko = false;
for (String item : sisalto) {
if (valinta.equals(item)) {
loytyko = true;
break;
}
}
//jos ei löytynyt, niin avataan dialogi ja kysytään halutaanko valinta lisätä
if (!loytyko) {
tallennusIkkuna(valinta);
} else {
this.getEditor().requestFocus();
}
}
/**
* Metodi comboboxista etsimistä varten, Algoritmi toimii vertaamalla käyttäjän tekstiä
* items listan sisältöihin ja lisää ne comboxiin, mitkä vastaavat hakusanaa.
* Jos haku tyhjä, niin laitetaan kaikki comboboxiin, tulostetaan ja poistutaan.
* Aikavaativuus kasvaa lineaarisesti, items listan kasvaessa
*/
private void haku(KeyEvent k) {
if (!suodattaminen.get()){
return;
}
//estetään hakeminen, jos painettu enter-nappia
if (k.getCharacter().equals("\r")) {
tutkiValinta();
return;
}
java.lang.String hakuSana = this.getEditor().getText() + k.getCharacter();
hakuSana = hakuSana.trim();
//varmistetaan, että hakusana ei ole tyhjä, jos on niin näytetään kaikki vaihtoehdot
if (hakuSana.isEmpty()) {
this.getItems().setAll(sisalto);
this.show();
return;
}
//käydään läpi jokainen vaihtoehto ja näytetään vain ne jotka ovat yhteensopivia
List<java.lang.String> naytettavat = new ArrayList<>();
for (java.lang.String item : sisalto) {
if (item.toLowerCase().startsWith(hakuSana.toLowerCase())) {
naytettavat.add(item);
}
}
this.getItems().setAll(naytettavat);
}
/**
* Tallennusikkunan esittävä metodi
*
* @param valinta valinta joka tallennetaan
*/
private void tallennusIkkuna(java.lang.String valinta) {
Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
alert.setTitle("Valitse");
alert.setHeaderText(null);
alert.setContentText("Haluatko tallentaa valinnan " + valinta + "?");
ButtonType buttonTypeYes = new ButtonType("Kyllä", ButtonBar.ButtonData.OK_DONE);
ButtonType buttonTypeCancel = new ButtonType("Ei", ButtonBar.ButtonData.CANCEL_CLOSE);
alert.getButtonTypes().setAll(buttonTypeYes, buttonTypeCancel);
Optional<ButtonType> result = alert.showAndWait();
if (result.get() == buttonTypeYes) {
sisalto.add(valinta);
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>LisaaReissuGUIController.java</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" path="src"/>
<classpathentry exported="true" kind="lib" path="C:/kurssit/jar/fxgui.jar"/>
<classpathentry kind="con" path="org.eclipse.fx.ide.jdt.core.JAVAFX_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/5"/>
<classpathentry kind="lib" path="C:/kurssit/jar/DynamicComboBox.jar"/>
<classpathentry kind="lib" path="C:/Users/miikk/Downloads/DynamicComboBox (1).jar"/>
<classpathentry kind="lib" path="C:/Users/miikk/Downloads/DynamicComboBox (2).jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>