2015-01-02 51 views
0

最近我已經進入了Java的一些Gui編程。我注意到,當我創建一個JComboBox並試圖在我的GUI中顯示文本不完整時。它的模糊時間很多,如下所示。我曾嘗試增加GridBagConstraint的大小,但它仍然存在。一旦我按下按鈕,這也會發生在按鈕上。Gui JCombobox文字變得模糊

enter image description here

第1類:

public class load { 

     private JFrame frame; 

     public static void main(String args[]) throws InvocationTargetException, 
       InterruptedException { 

      EventQueue.invokeAndWait(new Runnable() { 
       public void run() { 
        try { 
         UIManager.setLookAndFeel(UIManager 
           .getSystemLookAndFeelClassName()); 
        } catch (Exception ex) { 
         ex.printStackTrace(); 
        } 
        // Create the UI here 
        load window = new load(); 

        window.frame.setVisible(true); 
       } 
      }); 
     } 

     private void loadGui() { 
      JButton create = new JButton(); 
      create.addActionListener(new ActionListener() { 

       @Override 
       public void actionPerformed(ActionEvent arg0) { 
        // TODO Auto-generated method stub 

        SelectionView a = new SelectionView(); 

        // VVPRIMARY ERROR CURRENTLY VV 
        // unable to setvisible false without the nextframe losing pixel 
        frame.setVisible(false); 
        frame.dispose(); 


       } 

      }); 

      frame.setSize(400, 400); 
      frame.add(create); 


     } 

    } 

2類:

public class SelectionView extends JFrame { 

    public SelectionView() { 
     // intialize frame 
     JFrame selection = new JFrame("Sport Selection"); 
     JPanel a = new JPanel(); 

     a.setLayout(new GridBagLayout()); 
     GridBagConstraints c = new GridBagConstraints(); 

     selection.setSize(300, 500); 

     final JComboBox box = createDropdown(); 
     JButton load = new JButton("Load"); 

     load.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       // TODO Auto-generated method stub 
       int value = box.getSelectedIndex(); 

       switch (value) { 
       case 0: 
        TableTennisView a = new TableTennisView(); 
        break; 
       case 1: 
        BasketBallView b = new BasketBallView(); 
        break; 
       default: 
        System.out.println("Nothing"); 
        break; 
       } 
      } 

     }); 
     // create comboBox 


     a.add(box, c); 

     a.add(load, c); 

     selection.add(a); 
     selection.setVisible(true); 

    } 

    /** 
    * Method CreateDropDown 
    * 
    * Creates the dropdown menu for the selection view 
    * 
    * @return the dropdown menu used in the view 
    */ 
    public JComboBox createDropdown() { 
     String[] sport = { "Table Tennis", "BasketBall" }; 

     JComboBox cb = new JComboBox(sport); 

     return cb; 
    } 
} 

回答

1

確保您的initialise(和更新)從事件指派線程的上下文中的UI。

查看Initial Threads瞭解更多詳情。

EventQueue.invokeAndWait(new Runnable() { 
    @Override 
    public void run() { 
     try { 
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
     } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
      ex.printStackTrace(); 
     } 
     // Create the UI here 
    } 
}); 

此外,如果可能的話,setVisible在窗口上。最後,你已經建立了基本的UI之後。如果用戶界面是動態的,你需要調用revalidaterepaint容器要添加的組件或考慮使用CardLayout

某些視頻驅動程序可能會導致在某些平臺上的問題,如果問題仍然存在,考慮提供一個runnable example這表明你的問題。這將導致更少的困惑和更好的迴應

+0

感謝您的提示! 從我看到的情況來看,重新驗證或重新繪製正在修復它。 由於我幾乎沒有涉及該主題,因此我會更多地探討線索。 一旦完成,我將把所有組件放在一個CardLayout中,並在將它們放在一起之前分別關注每個獨立部分。 – user3662979

+0

像許多GUI框架一樣,Swing運行在它自己的線程中,並且不是線程安全的,如果您不確保在GUI線程中運行,則可能會發生奇怪和奇妙的事情(事件調度線程) – MadProgrammer

+0

嗯我嘗試添加你給的線和它的工作還沒有像素。 我實際上已經做了gui編程的前一個版本,這在之前不可避免地工作,但是現在給我這個相同的併發錯誤。另外,我已經更新了我的視頻驅動程序,因爲這是我一直使用的驅動程序。 – user3662979