Java setIcon不在工作条件下工作

Java setIcon不在工作条件下工作,java,swing,netbeans,imageicon,Java,Swing,Netbeans,Imageicon,当我使用if…else。。。语句与数据库连接时,将无法正确设置图标 这是数据库及其值: JFrame上有两个标签,专门用于图标。现在我们将重点关注其中一个标签,因为它们的功能是相同的 提取记录时,其中一列“MSGTYPE”包含“信息”、“公告”、“奖励”或“警告”。JLabel的图标必须与图像和消息类型相匹配,例如,如果当前记录是公告,则图标必须是“公告”图标。发生了什么,是我用的如果…否则。。。语句,但它默认为else语句。请参阅下面的代码 try { String sql = "

当我使用if…else。。。语句与数据库连接时,将无法正确设置图标

这是数据库及其值:

JFrame上有两个标签,专门用于图标。现在我们将重点关注其中一个标签,因为它们的功能是相同的

提取记录时,其中一列“MSGTYPE”包含“信息”、“公告”、“奖励”或“警告”。JLabel的图标必须与图像和消息类型相匹配,例如,如果当前记录是公告,则图标必须是“公告”图标。发生了什么,是我用的如果…否则。。。语句,但它默认为else语句。请参阅下面的代码

try {
     String sql = "Select * from app.EBULLETINS ORDER BY msgid DESC FETCH FIRST 2 ROWS ONLY";
     Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
     Class.forName("org.apache.derby.jdbc.ClientDriver");
     Connection con = (Connection) DriverManager.getConnection("jdbc:derby://localhost:1527/GTPADB", "some#uSERn@me, "some#P@$$w0rd");
     Statement stmt = con.createStatement();
     ResultSet rs = stmt.executeQuery(sql);

     if (rs.next()) {
          eBul1_Title = rs.getString("Title");
          eBul1_Msg = rs.getString("Msg");
          eBul1_Type = rs.getString("MSGTYPE");
     }

     eBul1T.setText(eBul1_Title + "/" + eBul1_Type);
     eBul1M.setText(eBul1_Msg);
     System.out.println("Setting Icons");

     if (eBul1_Type == "INFORMATION") {
          TypeImage1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Information.png")));
          System.out.println("Info");
     } 
     else if (eBul1_Type == "ANNOUNCEMENT") {
          TypeImage1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/announcement.png")));
          System.out.println("Announce");
     } 
     else if (eBul1_Type == "WARNING") {
          TypeImage1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Warning.png")));
          System.out.println("Warning");
     } 
     else if (eBul1_Type == "AWARD") {
          TypeImage1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/award.png")));
          System.out.println("Award");
     } 
     else {
          TypeImage1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Information.png")));
          System.out.println("Other");
     }
} 
catch (Exception eB1Exc) {
     JOptionPane.showMessageDialog(this, eB1Exc);
}
运行时,将输出以下PrintLN:

1. Setting Icons
2. Other
3. Other
JFrame也这样显示:(忽略未显示的字段)

*您会注意到公告与信息具有相同的图标*


问题在于
字符串的比较。由于
=
操作员检查,您的
if
语句未产生
true

在比较对象/字符串时,需要使用equals()方法,而不是==方法

if (eBul1_Type.equals("INFORMATION")) {
更好的是,在计算
字符串时可以使用switch语句

switch (eBul1_Type) {
    case "INFORMATION":
          typeImage1.setIcon(...);
          System.out.println("Info");
          break;
    case "ANNOUNCEMENT":
          typeImage1.setIcon(...);
          System.out.println("Info");
          break;
    case "WARNING":
          typeImage1.setIcon(...);
          System.out.println("Warning");
          break;
    case "Award":
          typeImage1.setIcon(...);
          System.out.println("Award");
          break;
    default:
         typeImage1.setIcon(...);
         System.out.println("Other");
}

如果添加/删除任何公告类型,这将提供一种更易于管理的语法。

当然!!!!看,当我连续八个小时不休息地编写代码时,就会发生这种情况。我知道,这是常见的逻辑,但疲劳>逻辑。谢谢。可能的副本可能的副本