Swing - 使用GridLayout和JList

时间:2016-03-28 09:54:55

标签: java image swing jlist grid-layout

道歉我的代码太乱了。我已添加并更改并注释了大量代码,并且还没有完成清理任何代码。

我的主要问题是如何获得一组5x5图像。我需要能够定期更新它,因为它是一张地图。这些更新将在与主要方法不同的方法中进行,并且很难知道特定方块中的图像是什么 - 因此我为什么要创建一个名为ArrayList的前一个地图。

这样我可以删除上一个地图的元素,然后添加新的元素。这真的很难看,所以我试图通过使用JList来改变我这样做的方式。我并不完全理解它,但在我见过的很多例子中都出现了这个问题。

我的想法是,我可以将所有25张图片(作为JLabel组件)添加到此列表中,然后将此列表添加到我希望它显示的面板中。

我也尝试使用GridLayout,因为它也出现在很多例子中。我认为网格布局的结果是我设置了一个5x5网格布局,然后使用setLayout(<GridLayout name>)到我希望网格所在的面板。然后我将想要在地图中的图像添加到此网格布局。

我的理解是否正确?我看了很多例子和解释,但我仍然不确定。我也在努力理解如何将这两个想法结合起来 - 我必须这样做吗?如果是这样,我是以正确的方式做到的?如果不是我该怎么做?

到目前为止,我已经设法得到了这个:

Map so far

但是,出于某种原因,图像显示为列而不是5x5网格。 这是我一直在努力的相关代码:

public class GameGUI3 extends JFrame implements ActionListener                                                                                               
{                                                                                                                                                            
  private static final long serialVersionUID = 1L;                                                                                                         
  JFrame f = new JFrame("Dungeons of Doom");                                                                                                               
  JPanel textPanel = new JPanel();                                                                                                                         
  JPanel leftPanel = new JPanel(new GridBagLayout());                                                                                                      
  JPanel moveButtonPanel = new JPanel(new GridBagLayout());                                                                                                
  JPanel extraButtonPanel = new JPanel(new GridBagLayout());                                                                                               
  JPanel mapPanel = new JPanel(new GridBagLayout());                                                                                                       
  GridLayout gl = new GridLayout(5, 5);                                                                                                                    
  JTextArea textArea = new JTextArea(20, 50);                                                                                                              
  JScrollPane scrollPane = new JScrollPane(textArea);                                                                                                      
  DefaultListModel listModel = new DefaultListModel();                                                                                                     
  JList list = new JList(listModel);                                                                                                                       
  String action;                                                                                                                                           
  ArrayList<String> previousMap = new ArrayList<String>();                                                                                                 
  GridBagConstraints mapC = new GridBagConstraints();                                                                                                      
  private static GUIClient3 client = new GUIClient3();                                                                                                     

  JButton n = new JButton("N");                                                                                                                            
  JButton e = new JButton("E");                                                                                                                            
  JButton s = new JButton("S");                                                                                                                            
  JButton w = new JButton("W");                                                                                                                            
  JButton look = new JButton("LOOK");                                                                                                                      
  JButton pickup = new JButton("PICKUP");                                                                                                                  
  JButton hello = new JButton("HELLO");                                                                                                                    
  JButton quit = new JButton("QUIT");                                                                                                                      

  public GameGUI3()                                                                                                                                        
  {                                                                                                                                                        
      GridBagConstraints northC = new GridBagConstraints();                                                                                                
      GridBagConstraints eastC = new GridBagConstraints();                                                                                                 
      GridBagConstraints southC = new GridBagConstraints();                                                                                                
      GridBagConstraints westC = new GridBagConstraints();                                                                                                 
      GridBagConstraints leftTopC = new GridBagConstraints();                                                                                              
      GridBagConstraints leftBottomC = new GridBagConstraints(GridBagConstraints extraC = new GridBagConstraints();                                                                                                

      northC.insets = new Insets(10, 65, 10, 10);                                                                                                          
      eastC.insets = new Insets(10, 65, 10, 10);                                                                                                           
      southC.insets = new Insets(10, 65, 10, 10);                                                                                                          
      westC.insets = new Insets(10, 0, 10, 10);                                                                                                            
      leftTopC.insets = new Insets(10, 10, 30, 10);                                                                                                        
      mapC.insets = new Insets(30, 30, 30, 30);                                                                                                            
      extraC.insets = new Insets(10, 10, 10, 10);                                                                                                          

      f.setBounds(100, 100, 1000, 600); // (start on x-axis, start on y, width, height)                                                                    

      textPanel.setBounds(1000, 250, 500, 200);                                                                                                            
      textPanel.add(new JScrollPane(textArea));                                                                                                            

      f.getContentPane().add(leftPanel, BorderLayout.WEST);                                                                                                

      leftTopC.gridx = 0;                                                                                                                                  
      leftTopC.gridy = 0;                                                                                                                                  
      leftTopC.anchor = GridBagConstraints.FIRST_LINE_START;                                                                                               
      leftPanel.add(moveButtonPanel, leftTopC);                                                                                                            

      //mapC.gridx = 0;                                                                                                                                    
      //mapC.gridy = 1;                                                                                                                                    
      //mapC.anchor = GridBagConstraints.LINE_START;                                                                                                       
      //leftPanel.add(mapPanel, mapC);                                                                                                                     

      //mapPanel.setLayout(gl);                                                                                                                            
      leftPanel.add(mapPanel);                                                                                                                             

      leftBottomC.gridx = 0;                                                                                                                               
      leftBottomC.gridy = 2;                                                                                                                               
      leftBottomC.anchor = GridBagConstraints.LAST_LINE_START;                                                                                             
      leftPanel.add(extraButtonPanel, leftBottomC);                                                                                                        

      f.getContentPane().add(textPanel, BorderLayout.EAST);                                                                                                

      textArea.setEditable(false);                                                                                                                         

      this.setVisible(false);                                                                                                                              

      northC.gridx = 0;                                                                                                                                    
      northC.gridy = 0;                                                                                                                                    
      northC.gridwidth = 3;                                                                                                                                
      northC.anchor = GridBagConstraints.NORTH;
      moveButtonPanel.add(n, northC);                                                                                                                      

      westC.gridx = 0;                                                                                                                                     
      westC.gridy = 1;                                                                                                                                     
      westC.gridwidth = 1;                                                                                                                                 
      westC.anchor = GridBagConstraints.WEST;                                                                                                              
      moveButtonPanel.add(w, westC);                                                                                                                       

      eastC.gridx = 2;                                                                                                                                     
      eastC.gridy = 1;                                                                                                                                     
      eastC.gridwidth = 3;                                                                                                                                 
      eastC.anchor = GridBagConstraints.EAST;                                                                                                              
      moveButtonPanel.add(e, eastC);                                                                                                                       

      southC.gridx = 0;                                                                                                                                    
      southC.gridy = 2;                                                                                                                                    
      southC.gridwidth = 3;                                                                                                                                
      southC.anchor = GridBagConstraints.SOUTH;                                                                                                            
      moveButtonPanel.add(s, southC);                                                                                                                      

      mapC.gridx = 0;                                                                                                                                      
      mapC.gridy = 2;                                                                                                                                      
      //mapC.gridwidth = 10;                                                                                                                               
      //mapC.anchor = GridBagConstraints.LINE_START;                                                                                                       
      //mapPanel.setLayout(gl);                                                                                                                            
      leftPanel.add(mapPanel, mapC);                                                                                                                       

      ImageIcon HereBeDragonsIcon = new ImageIcon("HereBeDragons.jpg", "Image");                                                                           
      JLabel HereBeDragonsLabel = new JLabel(HereBeDragonsIcon);                                                                                           

      //mapPanel.add(HereBeDragonsLabel);                                                                                                                  

      int count=0;                                                                                                                                         

      for(int i=0; i<4; i++)                                                                                                                               
      {                                                                                                                                                    
          listModel.add(count++, HereBeDragonsIcon);                                                                                                       
          //listModel.addElement(HereBeDragonsIcon);                                                                                                       

          previousMap.add("HereBeDragonsLabel");                                                                                                           
          //mapPanel.add(HereBeDragonsLabel);                                                                                                              
      }                                                                                                                                                    
      //JList list = new JList(listModel);                                                                                                                 
      //mapPanel.add(list);                                                                                                                                
      mapPanel.add(list);                                                                                                                                  

      extraButtonPanel.add(look, extraC);                                                                                                                  
      extraButtonPanel.add(pickup, extraC);                                                                                                                
      extraButtonPanel.add(hello, extraC);                                                                                                                 
      extraButtonPanel.add(quit, extraC);                                                                                                                  

      n.addActionListener(this);                                                                                                                           
      e.addActionListener(this);                                                                                                                           
      s.addActionListener(this);                                                                                                                           
      w.addActionListener(this);                                                                                                                           
      look.addActionListener(this);                                                                                                                        
      pickup.addActionListener(this);                                                                                                                      
      hello.addActionListener(this);                                                                                                                       
      quit.addActionListener(this);                                                                                                                        

      f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);                                                                                                 
      f.pack();                                                                                                                                            
      f.setVisible(true);                                                                                                                                  
  }                                                                                                                                                        

非常感谢 - 如果有什么不清楚请告诉我,我会尝试重新说出我的问题或更好地解释我的代码。

0 个答案:

没有答案