Swing 垂直显示标签

Swing 垂直显示标签,swing,awt,optaplanner,Swing,Awt,Optaplanner,请,我想垂直显示标签的文本 我还希望列标题垂直显示 实际上,我试着使用: public static final String LOGO_PATH = "/org/optaplanner/examples/curriculumcourse/swingui/curriculumCourseLogo.png"; private final TimeTablePanel<Room, Period> roomsPanel; private final TimeTablePanel<T

请,我想垂直显示标签的文本

我还希望列标题垂直显示

实际上,我试着使用:

public static final String LOGO_PATH = "/org/optaplanner/examples/curriculumcourse/swingui/curriculumCourseLogo.png";

private final TimeTablePanel<Room, Period> roomsPanel;
private final TimeTablePanel<Teacher, Period> teachersPanel;
private final TimeTablePanel<Curriculum, Period> curriculaPanel;

public CurriculumCoursePanel() {
    setLayout(new BorderLayout());
    JTabbedPane tabbedPane = new JTabbedPane();
    roomsPanel = new TimeTablePanel<Room, Period>();
    tabbedPane.add("Rooms", new JScrollPane(roomsPanel));
    teachersPanel = new TimeTablePanel<Teacher, Period>();
    tabbedPane.add("Teachers", new JScrollPane(teachersPanel));
    curriculaPanel = new TimeTablePanel<Curriculum, Period>();
    tabbedPane.add("Curricula", new JScrollPane(curriculaPanel));
    add(tabbedPane, BorderLayout.CENTER);
    setPreferredSize(PREFERRED_SCROLLABLE_VIEWPORT_SIZE);
}

@Override
public boolean isWrapInScrollPane() {
    return false;
}

@Override
public boolean isRefreshScreenDuringSolving() {
    return true;
}

private CourseSchedule getCourseSchedule() {
    return (CourseSchedule) solutionBusiness.getSolution();
}

public void resetPanel(Solution solution) {
    roomsPanel.reset();
    teachersPanel.reset();
    curriculaPanel.reset();
    CourseSchedule courseSchedule = (CourseSchedule) solution;
    defineGrid(courseSchedule);
    fillCells(courseSchedule);
    repaint(); // Hack to force a repaint of TimeTableLayout during "refresh screen while solving"
}

private void defineGrid(CourseSchedule courseSchedule) {
    JButton footprint = new JButton("LinLetGre1-0");
    footprint.setMargin(new Insets(0, 0, 0, 0));
    int footprintWidth = footprint.getPreferredSize().width;

    roomsPanel.defineColumnHeaderByKey(HEADER_COLUMN_GROUP1); // Day header
    roomsPanel.defineColumnHeaderByKey(HEADER_COLUMN); // Period header
    for (Room room : courseSchedule.getRoomList()) {
        roomsPanel.defineColumnHeader(room, footprintWidth);
    }
    roomsPanel.defineColumnHeader(null, footprintWidth); // Unassigned

    teachersPanel.defineColumnHeaderByKey(HEADER_COLUMN_GROUP1); // Day header
    teachersPanel.defineColumnHeaderByKey(HEADER_COLUMN); // Period header
    for (Teacher teacher : courseSchedule.getTeacherList()) {
        teachersPanel.defineColumnHeader(teacher, footprintWidth);
    }

    curriculaPanel.defineColumnHeaderByKey(HEADER_COLUMN_GROUP1); // Day header
    curriculaPanel.defineColumnHeaderByKey(HEADER_COLUMN); // Period header
    for (Curriculum curriculum : courseSchedule.getCurriculumList()) {
        curriculaPanel.defineColumnHeader(curriculum, footprintWidth);
    }

    roomsPanel.defineRowHeaderByKey(HEADER_ROW); // Room header
    teachersPanel.defineRowHeaderByKey(HEADER_ROW); // Teacher header
    curriculaPanel.defineRowHeaderByKey(HEADER_ROW); // Curriculum header
    for (Period period : courseSchedule.getPeriodList()) {
        roomsPanel.defineRowHeader(period);
        teachersPanel.defineRowHeader(period);
        curriculaPanel.defineRowHeader(period);
    }
    roomsPanel.defineRowHeader(null); // Unassigned period
    teachersPanel.defineRowHeader(null); // Unassigned period
    curriculaPanel.defineRowHeader(null); // Unassigned period
}

private void fillCells(CourseSchedule courseSchedule) {
    roomsPanel.addCornerHeader(HEADER_COLUMN_GROUP1, HEADER_ROW, createHeaderPanel(new JLabel("Day")));
    roomsPanel.addCornerHeader(HEADER_COLUMN, HEADER_ROW, createHeaderPanel(new JLabel("Time")));
    fillRoomCells(courseSchedule);
    teachersPanel.addCornerHeader(HEADER_COLUMN_GROUP1, HEADER_ROW, createHeaderPanel(new JLabel("Day")));
    teachersPanel.addCornerHeader(HEADER_COLUMN, HEADER_ROW, createHeaderPanel(new JLabel("Time")));
    fillTeacherCells(courseSchedule);
    curriculaPanel.addCornerHeader(HEADER_COLUMN_GROUP1, HEADER_ROW, createHeaderPanel(new JLabel("Day")));
    curriculaPanel.addCornerHeader(HEADER_COLUMN, HEADER_ROW, createHeaderPanel(new JLabel("Time")));
    fillCurriculumCells(courseSchedule);
    fillDayCells(courseSchedule);
    fillLectureCells(courseSchedule);
}

private void fillRoomCells(CourseSchedule courseSchedule) {
    for (Room room : courseSchedule.getRoomList()) {
        roomsPanel.addColumnHeader(room, HEADER_ROW,
                createHeaderPanel(new JLabel(room.getLabel(), SwingConstants.CENTER)));
    }
    roomsPanel.addColumnHeader(null, HEADER_ROW,
            createHeaderPanel(new JLabel("Unassigned", SwingConstants.CENTER)));
}

private void fillTeacherCells(CourseSchedule courseSchedule) {
    for (Teacher teacher : courseSchedule.getTeacherList()) {
        teachersPanel.addColumnHeader(teacher, HEADER_ROW,
                createHeaderPanel(new JLabel(teacher.getLabel(), SwingConstants.CENTER)));
    }
}

private void fillCurriculumCells(CourseSchedule courseSchedule) {
    for (Curriculum curriculum : courseSchedule.getCurriculumList()) {
        curriculaPanel.addColumnHeader(curriculum, HEADER_ROW,
                createHeaderPanel(new JLabel(curriculum.getLabel(), SwingConstants.CENTER)));
    }
}

private void fillDayCells(CourseSchedule courseSchedule) {
    for (Day day : courseSchedule.getDayList()) {
        Period dayStartPeriod = day.getPeriodList().get(0);
        Period dayEndPeriod = day.getPeriodList().get(day.getPeriodList().size() - 1);
        roomsPanel.addRowHeader(HEADER_COLUMN_GROUP1, dayStartPeriod, HEADER_COLUMN_GROUP1, dayEndPeriod,
                createHeaderPanel(new JLabel(day.getLabel())));
        teachersPanel.addRowHeader(HEADER_COLUMN_GROUP1, dayStartPeriod, HEADER_COLUMN_GROUP1, dayEndPeriod,
                createHeaderPanel(new JLabel(day.getLabel())));
        curriculaPanel.addRowHeader(HEADER_COLUMN_GROUP1, dayStartPeriod, HEADER_COLUMN_GROUP1, dayEndPeriod,
                createHeaderPanel(new JLabel(day.getLabel())));
        for (Period period : day.getPeriodList()) {
            roomsPanel.addRowHeader(HEADER_COLUMN, period,
                    createHeaderPanel(new JLabel(period.getTimeslot().getLabel())));
            teachersPanel.addRowHeader(HEADER_COLUMN, period,
                    createHeaderPanel(new JLabel(period.getTimeslot().getLabel())));
            curriculaPanel.addRowHeader(HEADER_COLUMN, period,
                    createHeaderPanel(new JLabel(period.getTimeslot().getLabel())));
        }
    }
    roomsPanel.addRowHeader(HEADER_COLUMN_GROUP1, null, HEADER_COLUMN, null,
            createHeaderPanel(new JLabel("Unassigned")));
    teachersPanel.addRowHeader(HEADER_COLUMN_GROUP1, null, HEADER_COLUMN, null,
            createHeaderPanel(new JLabel("Unassigned")));
    curriculaPanel.addRowHeader(HEADER_COLUMN_GROUP1, null, HEADER_COLUMN, null,
            createHeaderPanel(new JLabel("Unassigned")));
}

private void fillLectureCells(CourseSchedule courseSchedule) {
    TangoColorFactory tangoColorFactory = new TangoColorFactory();
    for (Lecture lecture : courseSchedule.getLectureList()) {
        Color lectureColor = tangoColorFactory.pickColor(lecture.getCourse());
        roomsPanel.addCell(lecture.getRoom(), lecture.getPeriod(),
                createButton(lecture, lectureColor));
        teachersPanel.addCell(lecture.getTeacher(), lecture.getPeriod(),
                createButton(lecture, lectureColor));
        for (Curriculum curriculum : lecture.getCurriculumList()) {
            curriculaPanel.addCell(curriculum, lecture.getPeriod(),
                    createButton(lecture, lectureColor));
        }
    }
}

private JPanel createHeaderPanel(JLabel label) {
    JPanel headerPanel = new JPanel(new BorderLayout());
    headerPanel.add(label, BorderLayout.NORTH);
    headerPanel.setBorder(BorderFactory.createCompoundBorder(
            BorderFactory.createLineBorder(TangoColorFactory.ALUMINIUM_5),
            BorderFactory.createEmptyBorder(2, 2, 2, 2)));
    return headerPanel;
}

private JButton createButton(Lecture lecture, Color color) {
    JButton button = new JButton(new LectureAction(lecture));
    button.setMargin(new Insets(0, 0, 0, 0));
    button.setBackground(color);
    if (lecture.isLocked()) {
        button.setIcon(CommonIcons.LOCKED_ICON);
    }
    return button;
}

private class LectureAction extends AbstractAction {

    private Lecture lecture;

    public LectureAction(Lecture lecture) {
        super(lecture.getLabel());
        this.lecture = lecture;
    }

    public void actionPerformed(ActionEvent e) {
        JPanel listFieldsPanel = new JPanel(new GridLayout(3, 2));
        listFieldsPanel.add(new JLabel("Period:"));
        List<Period> periodList = getCourseSchedule().getPeriodList();
        // Add 1 to array size to add null, which makes the entity unassigned
        JComboBox periodListField = new JComboBox(
                periodList.toArray(new Object[periodList.size() + 1]));
        periodListField.setRenderer(new LabeledComboBoxRenderer());
        periodListField.setSelectedItem(lecture.getPeriod());
        listFieldsPanel.add(periodListField);
        listFieldsPanel.add(new JLabel("Room:"));
        List<Room> roomList = getCourseSchedule().getRoomList();
        // Add 1 to array size to add null, which makes the entity unassigned
        JComboBox roomListField = new JComboBox(
                roomList.toArray(new Object[roomList.size() + 1]));
        roomListField.setRenderer(new LabeledComboBoxRenderer());
        roomListField.setSelectedItem(lecture.getRoom());
        listFieldsPanel.add(roomListField);
        listFieldsPanel.add(new JLabel("Locked:"));
        JCheckBox lockedField = new JCheckBox("immovable during planning");
        lockedField.setSelected(lecture.isLocked());
        listFieldsPanel.add(lockedField);
        int result = JOptionPane.showConfirmDialog(CurriculumCoursePanel.this.getRootPane(), listFieldsPanel,
                "Select period and room", JOptionPane.OK_CANCEL_OPTION);
        if (result == JOptionPane.OK_OPTION) {
            Period toPeriod = (Period) periodListField.getSelectedItem();
            if (lecture.getPeriod() != toPeriod) {
                solutionBusiness.doChangeMove(lecture, "period", toPeriod);
            }
            Room toRoom = (Room) roomListField.getSelectedItem();
            if (lecture.getRoom() != toRoom) {
                solutionBusiness.doChangeMove(lecture, "room", toRoom);
            }
            boolean toLocked = lockedField.isSelected();
            if (lecture.isLocked() != toLocked) {
                if (solutionBusiness.isSolving()) {
                    logger.error("Not doing user change because the solver is solving.");
                    return;
                }
                lecture.setLocked(toLocked);
            }
            solverAndPersistenceFrame.resetScreen();
        }
    }

}
public static final String LOGO_PATH=“/org/optaplanner/examples/coulumcourse/swingui/coulumcourselogo.png”;
私人最终时刻表面板室面板;
私人最后时刻表小组教师spanel;
私人最后时刻表小组课程表;
公共课程课程手册(){
setLayout(新的BorderLayout());
JTabbedPane tabbedPane=新的JTabbedPane();
roomsPanel=新的时间表面板();
选项卡窗格。添加(“房间”,新的JScrollPane(roomsPanel));
teachersPanel=新的TimeTablePanel();
添加(“教师”,新的JScrollPane(teachersPanel));
课程面板=新的时间表面板();
添加(“课程”,新JScrollPane(课程名称));
添加(选项卡窗格,BorderLayout.CENTER);
setPreferredSize(首选的可滚动的视口大小);
}
@凌驾
公共布尔值isWrapInScrollPane(){
返回false;
}
@凌驾
公共布尔值isRefreshScreenDuringSolving()期间{
返回true;
}
私人课程时间表getCourseSchedule(){
return(CourseSchedule)solutionBusiness.getSolution();
}
公共无效重置面板(解决方案){
roomsPanel.reset();
teachersPanel.reset();
课程名称重置();
CourseSchedule CourseSchedule=(CourseSchedule)解决方案;
defineGrid(课程时间表);
填充单元格(课程时间表);
repaint();//在“解决时刷新屏幕”期间强制重新绘制TimeTableLayout
}
私有无效定义ID(课程计划课程计划){
JButton footprint=新JButton(“LinLetGre1-0”);
setMargin(新的插图(0,0,0,0));
int footprintWidth=footprint.getPreferredSize().width;
roomsPanel.defineColumnHeaderByKey(标题\列\组1);//日标题
roomsPanel.defineColumnHeaderByKey(标题_列);//期间标题
对于(房间:courseSchedule.getRoomList()){
roomsPanel.defineColumnHeader(房间、封装外形宽度);
}
roomsPanel.defineColumnHeader(null,footprintWidth);//未分配
teachersPanel.defineColumnHeaderByKey(标题\列\组1);//日标题
teachersPanel.defineColumnHeaderByKey(HEADER_COLUMN);//期间头
for(教师:courseSchedule.getTeacherList()){
teachersPanel.defineColumnHeader(教师,足迹宽度);
}
CoursolaPanel.defineColumnHeaderByKey(标题\列\组1);//日标题
customarPanel.defineColumnHeaderByKey(HEADER_COLUMN);//期间头
对于(课程:courseSchedule.GetCoursulumList()){
课程名称。定义列标题(课程、足迹宽度);
}
roomsPanel.DefinerWheaderByKey(页眉_行);//房间页眉
teachersPanel.DefinerWheaderByKey(页眉_行);//教师页眉
CoursolaPanel.DefinerWheaderByKey(页眉_行);//课程页眉
对于(期间:courseSchedule.getPeriodList()){
roomsPanel.DefinerWheader(期间);
教师定义者(期间);
课程名称定义(期间);
}
roomsPanel.defineRowHeader(null);//未分配期间
teachersPanel.defineRowHeader(null);//未分配期间
CoursolaPanel.defineRowHeader(null);//未分配期间
}
专用空白填充单元格(课程计划课程计划){
roomsPanel.addCornerHeader(HEADER\u COLUMN\u GROUP1,HEADER\u ROW,createHeaderPanel(新的JLabel(“日”));
roomsPanel.addCornerHeader(HEADER_列、HEADER_行、createHeaderPanel(新JLabel(“时间”));
填充室细胞(课程时间表);
teachersPanel.addCornerHeader(页眉\列\组1,页眉\行,createHeaderPanel(新的JLabel(“日”));
teachersPanel.addCornerHeader(标题列、标题行、createHeaderPanel(新的JLabel(“时间”));
填充教学单元(课程时间表);
课程名称.addCornerHeader(页眉\列\组1,页眉\行,createHeaderPanel(新的JLabel(“日”));
课程名称addCornerHeader(标题列、标题行、createHeaderPanel(新JLabel(“时间”)));
填写课程单元(课程时间表);
fillDayCells(courseSchedule);
填写课程表(课程时间表);
}
专用空白填充室单元格(课程计划课程计划){
对于(房间:courseSchedule.getRoomList()){
roomsPanel.addColumnHeader(房间、标题行、,
createHeaderPanel(新的JLabel(room.getLabel(),SwingConstants.CENTER));
}
roomsPanel.addColumnHeader(空,标题\行,
createHeaderPanel(新JLabel(“未分配”,SwingConstants.CENTER));
}
私人空白填充教师单元格(课程计划课程计划){
for(教师:courseSchedule.getTeacherList()){
teachersPanel.addColumnHeader(教师、标题行、,
createHeaderPanel(新的JLabel(teacher.getLabel(),SwingConstants.CENTER));
}
}
专用空白填充课程单元格(课程时间表课程时间表){
对于(课程:courseSchedule.GetCoursulumList()){
课程名称.addColumnHeader(课程,标题行,
createHeaderPanel(新的JLabel(currency.getLabel(),SwingConstants.CENTER));
}
}
专用空白填充日单元格(课程计划课程计划){
for(Day-Day:courseSchedule.getDayList()){
期间dayStartPeriod=day.getPeriodList().get(0);
Period dayEndPeriod=day.getPeriodList().get(day.getPeriodList().size()-1);
roomsPanel.addRowHeader(标题\列\组1,dayStartPeriod,标题\列\组1,dayEndPeriod,
createHeaderPanel(新的JLabel(day.getLabel());
teachersPanel.addRowHeader(标题\列\组1,dayStartPeriod,标题\列\组1,dayEndPeriod,
createHeaderPanel(新的JLabel(day.getLabel());
课程名称.addRowHeader(标题\列\组1,dayStartPeriod,标题\列\组1,dayEndPeriod,
createHeaderPanel(新的JLabel(day.getLabel());
for(期间:day.getPeriodList()){
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: horizontalAlignment
at javax.swing.JLabel.checkHorizontalKey(Unknown Source)
at javax.swing.JLabel.setHorizontalAlignment(Unknown Source)
at javax.swing.JLabel.<init>(Unknown Source)
at javax.swing.JLabel.<init>(Unknown Source)