我只想从JavaFX图表API生成图表图像.我不想显示应用程序窗口,也不想启动应用程序(如果没有必要).
public class LineChartSample extends Application {
private List<Integer> data;
@Override public void start(Stage stage) {
stage.setTitle("Line Chart Sample");
final CategoryAxis xAxis = new CategoryAxis();
final NumberAxis yAxis = new NumberAxis();
xAxis.setLabel("Month");
final LineChart<String,Number> lineChart =
new LineChart<String,Number>(xAxis,yAxis);
lineChart.setTitle("Stock Monitoring, 2010");
XYChart.Series series = new XYChart.Series();
series.setName("My portfolio");
series.getData().add(new XYChart.Data("Jan", 23));
series.getData().add(new XYChart.Data("Feb", 14));
Scene scene = new Scene(lineChart,800,600);
lineChart.getData().add(series);
WritableImage image = scene.snapshot(null);
ImageIO.write(SwingFXUtils.fromFXImage(image, null), "png", chartFile);
//stage.setScene(scene);
//stage.show();
}
public static void main(String[] args) {
launch(args);
}
public …Run Code Online (Sandbox Code Playgroud) 我有一个像下面的kotlin方法
fun initDrawer(drawerView: DrawerView, drawerLayout: DrawerLayout, context: Context, onRefreshClick: () -> Unit) {
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试传递initDrawer(drawerView,drawerlayout,this,onRefreshClick())时,它给了我一个错误的required()无法应用于(kotlin.Unit)
是否可以将方法从java传递给kotlin.
我正在尝试学习 Kotlin,所以我正在学习互联网上的教程,其中讲师编写了一个与他们配合良好的代码,但它给我带来了错误。
这是错误
错误:(26, 17) Kotlin:无法创建抽象类的实例
import kotlin.random.Random
fun main(args: Array<String>) {
feedTheFish()
}
fun feedTheFish() {
val day = randomDay()
val food = "pellets"
print("Today is ${day} and the fish eat ${food}")
}
fun randomDay():String {
val week = listOf ("Monday", "Tuesday", "wednesday", "thursday", "friday", "saturday", "sunday")
return week[ Random().nextInt(7)]
}
Run Code Online (Sandbox Code Playgroud)
我从 return 语句中得到错误,我认为来自 Random。请帮助我理解这一点并修复此代码。
我在将图像加载到我的应用程序时遇到了问题.我正在尝试制作一个简单的图像浏览器.在左边我有一个文件夹列表.单击列表上的文件夹名称后,图像应显示在右侧(流动窗格).每张图片都在带边框的HBox中.但是我很快就会收到这样的错误:
java.lang.outofmemoryerror java heap space
Run Code Online (Sandbox Code Playgroud)
我查看了任务管理器 - 如果我只加载6张照片,该应用程序需要500mb的内存!另一件事 - 如果我更改列表中的文件夹,内存仍然被占用.在选择另一个文件夹时,我正在创建新的flowPane
flowPane = new FlowPane();
Run Code Online (Sandbox Code Playgroud)
所以带有所有ImageView的旧版本应该被垃圾收集器删除,对吗?
如何有效管理我的应用中的图像?
for(int i = 0 ; i < zdjecia.length; i++){
ImageView iv2 = new ImageView();
Image image = new Image("file:"+zdjecia[i].getAbsolutePath());
iv2.setImage(image);
if( image.getHeight() > image.getWidth()){
iv2.fitHeightProperty().bind(szerokoscZdjecia.multiply(0.8).subtract(6));
}else
iv2.fitWidthProperty().bind(szerokoscZdjecia.subtract(6));
iv2.setPreserveRatio(true);
iv2.setSmooth(true);
iv2.setCache(false);
String styl = "-fx-border-color: #b2b3b3;"
+ "-fx-border-width: 2;";
HBox boxNaFotke = new HBox();
boxNaFotke.prefWidthProperty().bind(szerokoscZdjecia);
boxNaFotke.prefHeightProperty().bind(szerokoscZdjecia.multiply(0.8));
boxNaFotke.setAlignment(Pos.CENTER);
boxNaFotke.setStyle(styl);
boxNaFotke.getChildren().add(iv2);
fotki.add(boxNaFotke);
flowPane.getChildren().add(boxNaFotke);
}
Run Code Online (Sandbox Code Playgroud) 这可能是一个非常基本的问题,但在Java学习的这个阶段让我感到困惑.我有以下代码:
package com.soti84;
import java.util.ArrayList;
public class InvokeMethod {
public static void main(String[] args) {
ArrayList<String> exams= new ArrayList<String>();
exams.add("Java");
exams.add("C#");
}
}
Run Code Online (Sandbox Code Playgroud)
如果我移动实例化ArrayList对象的行以及该方法外部对该对象的调用,则创建该对象的行很好,但不允许对该对象执行add()方法调用.这是为什么?
package com.soti84;
import java.util.ArrayList;
public class InvokeMethod {
ArrayList<String> exams= new ArrayList<String>();
exams.add("Java");
exams.add("C#");
public static void main(String[] args) {
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
我有两个ListViews,allStudentsList已经填充了其中的项目,currentStudentList没有.当用户选择项目时,我的目标allStudentList是移动到该项目currentStudentList.我通过在一个选择模型上放置一个监听器来做到这一点allStudentList.
我得到了一个IndexOutOfBoundsException,我不知道为什么会这样.从测试来看,似乎这个问题被隔离到这个方法的最后4行,但我不知道为什么.
allStudentsList.getSelectionModel().selectedItemProperty()
.addListener((observableValue, oldValue, newValue) -> {
if (allStudentsList.getSelectionModel().getSelectedItem() != null) {
ArrayList<String> tempCurrent = new ArrayList<>();
for (String s : currentStudentList.getItems()) {
tempCurrent.add(s);
}
ArrayList<String> tempAll = new ArrayList<>();
for (String s : allStudentsList.getItems()) {
tempAll.add(s);
}
tempAll.remove(newValue);
tempCurrent.add(newValue);
// clears current studentlist and adds the new list
if (currentStudentList.getItems().size() != 0) {
currentStudentList.getItems().clear();
}
currentStudentList.getItems().addAll(tempCurrent);
// clears the allStudentList and adds the new …Run Code Online (Sandbox Code Playgroud) 我有一个机场数据库表,每个机场都有一个名称和一个ID.
在JavaFX中,我有一个表单,其中ComboBox,组合框需要显示所有机场名称,并且在提交表单时,需要将机场的ID插入数据库(而不是其名称).
但我真的不知道解决方案是什么.
我有一个
ObservableList vliegveldenList = FXCollections.observableArrayList();
ObservableList vliegveldenIDList = FXCollections.observableArrayList();
Run Code Online (Sandbox Code Playgroud)
填充数据库连接 ComboBox
ResultSet rs = Project_Fasten_Your_Seatbelt.conn.createStatement()
.executeQuery("SELECT vliegveldnaam, vliegveld_id FROM fys_project.vliegvelden;");
while (rs.next()) {
vliegveldenList.add(rs.getString(1));
vliegveldenIDList.add(rs.getString(2));
}
Run Code Online (Sandbox Code Playgroud)
填充组合框:
vliegveldHerkomst.setValue("Luchthaven ...");
vliegveldHerkomst.setItems(vliegveldenList);
Run Code Online (Sandbox Code Playgroud)
按下按钮时会将其添加到数据库中:
String registratieValue = registratieNmrTxt.getText();
String vluchtValue = vluchtNrmTxt.getText();
String vliegveldValue = (String) vliegveldHerkomst.getSelectionModel().getSelectedItem();
String bestemmingValue = (String) vliegveldBestemming.getSelectionModel().getSelectedItem();
String gevondenValue = (String) vliegveldGevonden.getSelectionModel().getSelectedItem();
LocalDate dGevondenValue = datumGevondenDate.getValue();
LocalDate dVluchtValue = datumVluchtDate.getValue();
String gewichtValue = gewichtBagageTxt.getText();
String kleurenValue = (String) kleuren.getSelectionModel().getSelectedItem();
String kofferValue = (String) …Run Code Online (Sandbox Code Playgroud) 我想制作一个带有多个节点的 Slider(bar) 控件。
这个想法是能够使用它们设置时间间隔。
例如:
13:00 pm 4:00 pm
10:00 am ----------------[]------------[]-------------------- 11:00 pm
A B C
Run Code Online (Sandbox Code Playgroud)
但我只是注意到我无法向控件添加更多节点。有没有办法做到这一点?或者替代解决方案?
编辑:
示例中只有两个节点,但也可以是多个节点。
我想要做的是: 当用户尝试将某些内容拖放到窗口中时,只有当拖动文件具有扩展名(.mp3、.ogg、.wav)时,他才能执行此操作。如果文件没有此扩展名删除无法完成。我不希望链接等...被删除。
例如,只接受html就这么简单:
controller.setOnDragOver((over) -> {
Dragboard board = over.getDragboard();
if (board.hasHtml())
over.acceptTransferModes(TransferMode.LINK);
});
Run Code Online (Sandbox Code Playgroud)
我如何为此添加过滤器?
我在将边框窗格中的按钮根据舞台居中时遇到问题。它根据边框窗格居中,但我希望它位于窗口的正中心。
我指的是图片的底部,其中有播放按钮和难度选择框。
我使用边框将难度部分放在右侧,将播放按钮放在中间。
正如您所看到的,游戏并不在图片的中心。
我想这样做,但我不知道该怎么做。我认为我可以将左节点的宽度设置为等于右节点的宽度,但我的左节点没有任何内容。
// bottom section for positioning
BorderPane settings = new BorderPane();
settings.setPadding(new Insets(10));
// play button
Button playBtn = new Button("Play");
settings.setCenter(playBtn);
// difficulty options
Label diffLabel = new Label("Difficulty: ");
ChoiceBox<String> diffBox = new ChoiceBox<String>(FXCollections.observableArrayList(
"Easy", "Standard", "Hard"
));
diffBox.getSelectionModel().select(1);
// for wrapping the diffuclty.
HBox difficulty = new HBox(diffLabel, diffBox);
difficulty.setAlignment(Pos.CENTER);
difficulty.setSpacing(10);
settings.setRight(difficulty);
Run Code Online (Sandbox Code Playgroud)