设置JComboBox的前景色特定索引

时间:2016-08-02 14:49:33

标签: java jcombobox foreground

更改JComboBox中指定项目索引的前景色。

例如,

if (number <= 1) { set the first item of the JComboBox to Red. }

如果不使用CellRenderer,任何方法都可以这样做?从来没有使用过CellRenderer,根本没有经验......

已经看过这些网站: Changing a color chooser button's background color in Java 中, Multiple Colors for Each Item in JComboBox Colored jcombobox with colored items and focus

第3个似乎是最有用但不知道如何实现..

谢谢。

框架代码:

public class CreateBedForm extends JFrame {

private JPanel contentPane;
private JTextField textFieldPatientID;
private JTextField textFieldPatientName;
private JComboBox comboBoxAllocateBed;
private JComboBox comboBoxDpt;
private String bedStatusF = "Available";
private String selectedDepartment = "";

private int bedsAvailCardio;
private int bedsAvailOncology;
private int bedsAvailOrtho;
private int bedsAvailPediatric;

String[] departments = {"--Select Department--", "Cardiothoracic", "Oncology", "Orthopaedic", "Pediatric"};

Color comboBoxColour = new Color(0, 204, 0);

Color[] colorsForMain = {Color.BLACK, comboBoxColour, comboBoxColour, comboBoxColour, comboBoxColour};

Color[] colorsForCardiothoracic = {Color.BLACK, Color.RED, comboBoxColour, comboBoxColour, comboBoxColour};

Color[] colorsForOncology = {Color.BLACK, comboBoxColour, Color.RED, comboBoxColour, comboBoxColour};

Color[] colorsForOrthopaedic = {Color.BLACK, comboBoxColour, comboBoxColour, Color.RED, comboBoxColour};

Color[] colorsForPediatric = {Color.BLACK, comboBoxColour, comboBoxColour, comboBoxColour, Color.RED};




/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            try {
                CreateBedForm frame = new CreateBedForm("", "", "");
                frame.setVisible(true);
                frame.setLocationRelativeTo(null);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public CreateBedForm(String val1, String val2, String admissionID) {
    setTitle("Assign Bed");
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    setBounds(100, 100, 450, 400);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    JLabel lblPatientId = new JLabel("Patient ID:");
    lblPatientId.setBounds(42, 52, 71, 16);
    contentPane.add(lblPatientId);

    JLabel lblPatientName = new JLabel("Patient Name:");
    lblPatientName.setBounds(42, 97, 96, 16);
    contentPane.add(lblPatientName);

    textFieldPatientID = new JTextField();
    textFieldPatientID.setEditable(false);
    textFieldPatientID.setBounds(138, 49, 116, 22);
    contentPane.add(textFieldPatientID);
    textFieldPatientID.setColumns(10);

    textFieldPatientName = new JTextField();
    textFieldPatientName.setEditable(false);
    textFieldPatientName.setBounds(138, 94, 116, 22);
    contentPane.add(textFieldPatientName);
    textFieldPatientName.setColumns(10);

    JLabel lblAllocatedBed = new JLabel("Allocated Bed:");
    lblAllocatedBed.setBounds(42, 183, 96, 16);
    contentPane.add(lblAllocatedBed);

    comboBoxAllocateBed = new JComboBox();
    comboBoxAllocateBed.setBounds(138, 180, 71, 22);
    contentPane.add(comboBoxAllocateBed);

    JLabel lblNewLabel = new JLabel("Department:");
    lblNewLabel.setBounds(42, 142, 96, 16);
    contentPane.add(lblNewLabel);

    JButton btnAssignBed = new JButton("Assign Bed");
    btnAssignBed.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {

            //Adding

            String patientID = textFieldPatientID.getText();
            String patientName = textFieldPatientName.getText();

            String selectedDepartment = comboBoxDpt.getSelectedItem().toString();

            String selectedBed = comboBoxAllocateBed.getSelectedItem().toString();

            ChangeBed cb = new ChangeBed(selectedBed, selectedDepartment, patientID, patientName);

            ChangeBedControl cbc = new ChangeBedControl();

            cbc.processAssignBeds(cb, selectedBed);

            //Updating 

            bedStatusF = "Unavailable";

            ChangeBed cb2 = new ChangeBed(selectedBed, selectedDepartment, patientID, patientName);

            ChangeBedControl cbc2 = new ChangeBedControl();

            cbc2.processAssignBeds2(cb2, selectedBed, bedStatusF);

            dispose();

            File desktop = new File(System.getProperty("user.home"), "/Desktop"); 
            Document document = new Document(PageSize.A4.rotate());

            com.itextpdf.text.Font font1 = FontFactory.getFont("Verdana", 25, Font.BOLD);
            com.itextpdf.text.Font font2 = FontFactory.getFont("Verdana", 15, Font.BOLD);

            Paragraph p = new Paragraph(("Patient Admission Details"), font1);
            Paragraph p1 = new Paragraph(("Admission ID"), font2);
            Paragraph p2 = new Paragraph(("Patient ID"), font2);
            Paragraph p3 = new Paragraph(("Patient Name"), font2);
            Paragraph p4 = new Paragraph(("Date and Time Admitted"), font2);
            Paragraph p5 = new Paragraph(("Reason"), font2);
            Paragraph p6 = new Paragraph(("Date and Time Discharged"), font2);

            Paragraph pp = new Paragraph(("Bed Allocation Details"), font1);    
            Paragraph p01 = new Paragraph(("Bed ID"), font2);
            Paragraph p02 = new Paragraph(("Department"), font2);

            try {

                PageSize.A4.rotate();

                PdfWriter.getInstance(document, new FileOutputStream(desktop + "/" + textFieldPatientName.getText() + " Admission.pdf"));
                document.open();

                document.add(p);

                PdfPTable table = new PdfPTable(6);
                table.setWidthPercentage(102);

                PdfPCell cell1 = new PdfPCell();
                cell1.addElement(p1);

                PdfPCell cell2 = new PdfPCell();
                cell2.addElement(p2);

                PdfPCell cell3 = new PdfPCell();
                cell3.addElement(p3);

                PdfPCell cell4 = new PdfPCell();
                cell4.addElement(p4);

                PdfPCell cell5 = new PdfPCell();
                cell5.addElement(p5);

                PdfPCell cell6 = new PdfPCell();
                cell6.addElement(p6);

                AdmissionInfoControl aic1 = new AdmissionInfoControl();

                ArrayList<AdmissionInfo> admissionList = new ArrayList<AdmissionInfo>();

                admissionList = aic1.processGetAdmissionInfoView(admissionID);

                PdfPCell ell1;
                PdfPCell ell2;
                PdfPCell ell3;
                PdfPCell ell4;
                PdfPCell ell5;
                PdfPCell ell6;

                for (int i = 0; i < admissionList.size(); i++) {

                    ell1 = new PdfPCell(new Paragraph(admissionList.get(i).getAdmissionID()));
                    ell2 = new PdfPCell(new Paragraph(admissionList.get(i).getPatientID()));
                    ell3 = new PdfPCell(new Paragraph(admissionList.get(i).getPatientName()));
                    ell4 = new PdfPCell(new Paragraph(admissionList.get(i).getDateAdmitted()));
                    ell5 = new PdfPCell(new Paragraph(admissionList.get(i).getReason()));                       
                    ell6 = new PdfPCell(new Paragraph(admissionList.get(i).getDateDischarged()));

                    table.setSpacingBefore(30f);
                    table.addCell(cell1);
                    table.addCell(cell2);
                    table.addCell(cell3);
                    table.addCell(cell4);
                    table.addCell(cell5);
                    table.addCell(cell6);

                    table.addCell(ell1);
                    table.addCell(ell2);
                    table.addCell(ell3);
                    table.addCell(ell4);
                    table.addCell(ell5);
                    table.addCell(ell6);

                }               

                document.add(table);

                document.add(pp);

                PdfPTable table2 = new PdfPTable(2);

                table2.setHorizontalAlignment(Element.ALIGN_LEFT);

                table2.setWidthPercentage(50);

                PdfPCell cell01 = new PdfPCell();
                cell01.addElement(p01);

                PdfPCell cell02 = new PdfPCell();
                cell02.addElement(p02);

                ArrayList<ChangeBed> bedList = new ArrayList<ChangeBed>();

                bedList = cbc.processGetBedsEdit(textFieldPatientID.getText());

                PdfPCell ell01;
                PdfPCell ell02;

                for (int i = 0; i < bedList.size(); i++) {

                    ell01 = new PdfPCell(new Paragraph(bedList.get(i).getBedID()));
                    ell02 = new PdfPCell(new Paragraph(bedList.get(i).getDepartment()));

                    table2.setSpacingBefore(30f);
                    table2.addCell(cell01);
                    table2.addCell(cell02);

                    table2.addCell(ell01);
                    table2.addCell(ell02);

                }

                document.add(table2);

                document.close();

                JOptionPane.showMessageDialog(null, "Admission PDF has been successfully created.");

            } catch (Exception ex) {

                JOptionPane.showMessageDialog(null, "Error: " + ex);

            }

        }
    });

    btnAssignBed.setBounds(288, 303, 116, 25);
    contentPane.add(btnAssignBed);

    comboBoxDpt = new JComboBox();
    comboBoxDpt.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {

            String departmentSelection = comboBoxDpt.getSelectedItem().toString();

            ChangeBedControl cbcS = new ChangeBedControl();

            ArrayList<ChangeBed> bedList = new ArrayList<ChangeBed>();

            bedList = cbcS.processGetAvailBedsEdit(bedStatusF, departmentSelection);

            comboBoxAllocateBed.removeAllItems();

            for (int i = 0; i < bedList.size(); i++) {      
                comboBoxAllocateBed.addItem(bedList.get(i).getBedID());
            }

        }
    });
    //comboBoxDpt.setModel(new DefaultComboBoxModel(new String[] {"--Select Department--", "Cardiothoracic", "Oncology", "Orthopaedic", "Pediatric"}));
    comboBoxDpt = new JComboBox();

    ComboBoxRenderer renderer = new ComboBoxRenderer(comboBoxDpt);

    renderer.setColorsForMain(colorsForMain);
    renderer.setDepartments(departments);

    comboBoxDpt.setRenderer(renderer);

    comboBoxDpt.setBounds(138, 139, 153, 22);
    contentPane.add(comboBoxDpt);


    ChangeBedControl cbc = new ChangeBedControl();

    ArrayList<AdmissionInfo> admissionList = new ArrayList<AdmissionInfo>();

    admissionList = cbc.processGetChangeBedCreate(val1, val2);

    for (int i = 0; i < admissionList.size(); i++) {

        textFieldPatientID.setText(admissionList.get(i).getPatientID());

        textFieldPatientName.setText(admissionList.get(i).getPatientName());

    }

    //=============Distinct Feature=============
            ArrayList<ChangeBed> bedList = new ArrayList<ChangeBed>();

            int selectedIndex = comboBoxDpt.getSelectedIndex() ;

            String departmentComboBox;

            ChangeBedControl cbc2 = new ChangeBedControl();

            bedList = cbc2.processCountBedsAvailableDpt1();

            for (int i = 0; i < bedList.size(); i++) {

                bedsAvailCardio = bedList.get(i).getRowCountAvail();

            }

            if (bedsAvailCardio <= 3) {



            }

            ChangeBedControl cbc4 = new ChangeBedControl();

            bedList = cbc4.processCountBedsAvailableDpt2();

            for (int i = 0; i < bedList.size(); i++) {

                bedsAvailOncology = bedList.get(i).getRowCountAvail();

            }

            if (bedsAvailOncology <= 3) {



            }

            ChangeBedControl cbc6 = new ChangeBedControl();

            bedList = cbc6.processCountBedsAvailableDpt3();

            for (int i = 0; i < bedList.size(); i++) {

                bedsAvailOrtho = bedList.get(i).getRowCountAvail();

            }

            if (bedsAvailOrtho <= 3) {



            }

            ChangeBedControl cbc8 = new ChangeBedControl();

            bedList = cbc8.processCountBedsAvailableDpt4();

            for (int i = 0; i < bedList.size(); i++) {

                bedsAvailPediatric = bedList.get(i).getRowCountAvail();

            }

            if (bedsAvailPediatric <= 3) {



            }


}

}

ComboBoxRenderer类的代码:

public class ComboBoxRenderer implements ListCellRenderer{

private Color comboBoxColour;

private Color[] colorsForMain;

private Color[] colorsForCardiothoracic;

private Color[] colorsForOncology;

private Color[] colorsForOrthopaedic;

private Color[] colorsForPediatric;

private String[] departments;

public ComboBoxRenderer() {};


public ComboBoxRenderer(JComboBox comboBoxDpt) {

}


public String[] getDepartments() {
    return departments;
}


public void setDepartments(String[] departments) {
    this.departments = departments;
}


public Color getComboBoxColour() {
    return comboBoxColour;
}

public void setComboBoxColour(Color comboBoxColour) {
    this.comboBoxColour = comboBoxColour;
}

public Color[] getColorsForMain() {
    return colorsForMain;
}

public void setColorsForMain(Color[] colorsForMain) {
    this.colorsForMain = colorsForMain;
}

public Color[] getColorsForCardiothoracic() {
    return colorsForCardiothoracic;
}

public void setColorsForCardiothoracic(Color[] colorsForCardiothoracic) {
    this.colorsForCardiothoracic = colorsForCardiothoracic;
}

public Color[] getColorsForOncology() {
    return colorsForOncology;
}

public void setColorsForOncology(Color[] colorsForOncology) {
    this.colorsForOncology = colorsForOncology;
}

public Color[] getColorsForOrthopaedic() {
    return colorsForOrthopaedic;
}

public void setColorsForOrthopaedic(Color[] colorsForOrthopaedic) {
    this.colorsForOrthopaedic = colorsForOrthopaedic;
}

public Color[] getColorsForPediatric() {
    return colorsForPediatric;
}

public void setColorsForPediatric(Color[] colorsForPediatric) {
    this.colorsForPediatric = colorsForPediatric;
}


@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
    return list;

}

}

1 个答案:

答案 0 :(得分:0)

如果查看您提供的第二个链接,您可以看到以下代码行:

static Color[] colors = {Color.BLUE, Color.GRAY, Color.RED};

colors数组的每个索引都匹配JComboBox中String对象的索引。

在您的情况下,因为您希望第一个索引为红色,您可以将颜色数组的第一个索引设为红色:

static Color[] colors = {Color.BLUE, Color.RED, Color.BLUE}; //Index # 1 is red.