我参加了一个团队项目,我们几乎完全是JavaFX,但是我们的日历是由一些JComponents(JTable)组成的,它按预期工作,除非我们运行代码它最初显示为黑盒子(图片#1),直到调整阶段大小或执行其他操作。我在堆栈溢出(JavaFX and SwingNode - partial black Window)处查看了另一个问题,并且在那里声明它是更新31中的已知错误,并且已在更新40中修复。
我使用JDK 1.8u45运行代码,并且我或多或少地丢失了为什么会发生这种情况。这仍然是一个错误还是我的代码错了?
编辑:添加了我从测试应用程序中删除的代码
package fxcalendartest;
import java.text.*;
import java.util.*;
import javafx.application.Application;
import javafx.embed.swing.*;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.*;
import javafx.stage.Stage;
import javax.swing.*;
import javax.swing.table.*;
public class FxCalendarTest extends Application {
Calendar c;
DefaultTableModel model;
int rYear, rWeek, rDay, curYear, curWeek, curDay;
int q = 0;
String[] monthname = {"Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"};
GridPane calendarPane;
HBox buttonBox;
Button prevButton, nextButton, resetButton, activityButton, conferenceButton, entertainmentButton;
SwingNode jTableNode;
JTable table;
String[] days;
SimpleDateFormat df;
@Override
public void start(Stage primaryStage) {
buttonBox = new HBox(10);
prevButton = new Button("Forrge Uke");
nextButton = new Button("Neste Uke");
activityButton = new Button("Aktiviteter");
entertainmentButton = new Button("Underholdning");
conferenceButton = new Button("Foredrag");
resetButton = new Button("Tilbakestill");
model = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};
model.setColumnCount(8);
model.setRowCount(16);
String[] weekdays = {"Klokkeslett", "Søn", "Man", "Tirs", "Ons", "Tors", "Fre", "Lør"};
for (int i = 0; i < weekdays.length; i++) {
model.setValueAt(weekdays[i], 0, i);
}
calendarPane = new GridPane();
table = new JTable(model);
days = new String[8];
buttonBox.getChildren().addAll(prevButton, nextButton, resetButton, activityButton, entertainmentButton, conferenceButton);
c = Calendar.getInstance();
rWeek = c.get(GregorianCalendar.WEEK_OF_YEAR);
rYear = c.get(GregorianCalendar.YEAR);
curWeek = rWeek;
curYear = rYear;
c.setTime(new Date());
df = new SimpleDateFormat("dd.MM.yyyy");
jTableNode = new SwingNode();
SwingUtilities.invokeLater(
() -> {
jTableNode.setContent(table);
}
);
table.getTableHeader().setResizingAllowed(false);
table.setColumnSelectionAllowed(false);
table.setRowSelectionAllowed(false);
table.setRowHeight(25);
table.getTableHeader().setReorderingAllowed(false);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
calendarPane.add(buttonBox, 0, 0, 8, 1);
calendarPane.add(jTableNode, 0, 1, 8, 15);
addCalendarDates(curWeek, curYear);
Scene scene = new Scene(calendarPane, 660, 460);
primaryStage.setScene(scene);
primaryStage.setResizable(false);
primaryStage.show();
}
public void addCalendarDates(int w, int y) {
c.set(Calendar.WEEK_OF_YEAR, w - 1);
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
c.add(Calendar.DAY_OF_WEEK, 6);
model.setValueAt(monthname[c.get(Calendar.MONTH)], 0, 0);
String[] timestamps = {"10:00", "11:00", "12:00", "13:00", "14:00", "15:00", "16:00", "17:00", "18:00", "19:00", "20:00", "21:00", "22:00", "23:00"};
for (int i = 0; i < timestamps.length; i++) {
model.setValueAt(timestamps[i], i + 2, 0);
}
for (int i = 1; i < days.length; i++) {
int row = 1;
int column = i;
Date date = c.getTime();
model.setValueAt(df.format(date), row, column);
c.add(Calendar.DATE, 1);
days[i] = df.format(date);
}//end of for
table.setDefaultRenderer(table.getColumnClass(0), new DefaultTableCellRenderer());
}//end of class
public static void main(String[] args) {
launch(args);
}