2016-03-15 87 views
1

除了列表不顯示在JFrame上的事實之外,我不明白爲什麼我不能在沒有聲明新佈局的情況下添加內容。JList不會顯示在JFrame上

import javax.swing.*; 
    import javax.swing.event.ListSelectionEvent; 
    import javax.swing.event.ListSelectionListener; 

    import java.awt.*; 
    import java.awt.event.*; 

public class Gui3 extends JFrame { 
    private JPanel mousepanel; 
    private JLabel statusbar; 
    private JList list; 
    private static String[] colornames = {"black","blue","red","white"}; 
    private static Color[] colors = {Color.BLACK, Color.BLUE,Color.RED,Color.WHITE}; 

    public Gui3(){ 
     super("The title"); 

     list = new JList(colornames); 
     list.setVisibleRowCount(4); 
     list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
     list.setFixedCellHeight(15); 
     list.setFixedCellWidth(100); 
     add(new JScrollPane(list)); 
     list.addListSelectionListener(
       new ListSelectionListener(){ 
        public void valueChanged(ListSelectionEvent event){ 

用戶應該能夠從列表中選擇背景顏色,然後程序應該將背景更改爲該顏色。但不...

mousepanel.setBackground(colors[list.getSelectedIndex()]); 

        } 
       } 
      ); 

     mousepanel = new JPanel(); 
     mousepanel.setBackground(Color.WHITE); 
     add(mousepanel, BorderLayout.CENTER); 

     statusbar = new JLabel("Default"); 
     add(statusbar, BorderLayout.SOUTH); 


     HandlerClass handler = new HandlerClass(); 
     mousepanel.addMouseListener(handler); 
     mousepanel.addMouseMotionListener(handler); 

    } 
    private class HandlerClass implements MouseListener, MouseMotionListener 
     { 
     @Override 
     public void mouseClicked(MouseEvent event) { 
      statusbar.setText(String.format("Clicked at %d, %d", event.getX(),event.getY())); 
      DrawShapes shapes = new DrawShapes(); 
      shapes.setPosition(event.getX(), event.getY()); 
      add(shapes); 

     } 
     @Override 
     public void mousePressed(MouseEvent event){ 
      statusbar.setText("You pressed down the mouse"); 
     } 

     @Override 
     public void mouseReleased(MouseEvent event){ 
      statusbar.setText("You released the button"); 
     } 
     @Override 
     public void mouseEntered(MouseEvent event){ 
      statusbar.setText("You entered the area"); 
      mousepanel.setBackground(Color.RED); 
     } 
     @Override 
     public void mouseExited(MouseEvent event){ 
      statusbar.setText("The mouse has left the window"); 
      mousepanel.setBackground(Color.WHITE); 
     } 
     //These are mouse motion events 
     @Override 
     public void mouseDragged(MouseEvent event){ 
      statusbar.setText("You are dragging the mouse"); 
     } 
     @Override 
     public void mouseMoved(MouseEvent event){ 
      statusbar.setText("You are moving the mouse"); 
     } 

    } 
} 
+0

你'JList'是存在的,它只是空的。你如何運行它? – MadProgrammer

回答

4

由於您使用BorderLayout,但沒有爲ScrollPane設定位置。所以,mousePanel將位於ScrollPane

試試這個

add(new JScrollPane(list), BorderLayout.WEST); 
+0

謝謝,這工作完美! –

+2

@ BobbyC.Robillard,如果這有助於解決問題,請不要忘記單擊複選標記以「接受」答案,以便人們知道問題已得到解決。這也適用於您之前的問題。 – camickr