2014-07-26 17 views
6

Ban đầu tôi có một hình ảnh boong và một văn bản "sàn" ngay bên dưới hình ảnh trông tốtGridBagLayout không sắp xếp hình ảnh đúng

pic1

public class GuiTut extends JPanel { 
    private GridBagConstraints c = new GridBagConstraints(); 
    private JLabel deckLabel = new JLabel(); 

    public GuiTut() { 
     setLayout(new GridBagLayout()); 

     try { 
      deck = ImageIO.read(new File("resources/images/deck.jpg")); 
     } catch (Exception e) {} 

     c.gridx = 0; 
     c.gridy = 0; 
     JLabel deckPic = new JLabel(new ImageIcon(deck));  
     add(deckPic, c); 

     deckLabel.setText("Deck"); 
     c.gridx = 0; 
     c.gridy = 1; 
     add(deckLabel, c); 
} 

Nhưng sau khi tôi thêm bảng gridLayout của tôi, toàn bộ giao diện của tôi thiết kế đã bị rối tung lên. Như bạn có thể thấy hình ảnh sàn của tôi không được căn chỉnh đúng cách với hàng đầu tiên của GridLayout của tôi và văn bản "tầng" của tôi đã được ngăn cách bởi một vài không gian rộng.

pic2

public class GuiTut extends JPanel { 
    private GridBagConstraints c = new GridBagConstraints(); 
    private JLabel deckLabel = new JLabel(); 
    private JPanel gridLayoutPanel = new JPanel(new GridLayout(2, 0)); 
    private JLabel[] label = new JLabel[14]; 

    public GuiTut() { 
     setLayout(new GridBagLayout()); 

     try { 
      card = ImageIO.read(new File("resources/images/card.jpg")); 
     } catch (Exception e) {} 

     for(int i = 0; i < 14; i++) { 
      label[i] = new JLabel(new ImageIcon(card); 
      gridLayoutPanel.add(label[i]); 
     } 

     try { 
      deck = ImageIO.read(new File("resources/images/deck.jpg")); 
     } catch (Exception e) {} 

     c.gridx = 0; 
     c.gridy = 0; 
     JLabel deckPic = new JLabel(new ImageIcon(deck));  
     add(deckPic, c); 

     deckLabel.setText("Deck"); 
     c.gridx = 0; 
     c.gridy = 1; 
     add(deckLabel, c); 

     c.gridx = 1; 
     c.gridy = 0; 
     add(gridLayoutPanel, c); 
} 

Những gì tôi muốn là hình ảnh boong để được phù hợp với các dòng đầu tiên của gridLayout và văn bản "deck" vừa phải bên dưới hình ảnh boong nhưng tôi dường như không thể có được nó.

Trả lời

3

hình ảnh HotLinked

enter image description hereenter image description here

  1. Đối với nhãn boong tàu, bạn chỉ có thể là thiết lập các văn bản của nhãn và thiết lập các poistions văn bản dọc/ngang

    JLabel label = new JLabel(new ImageIcon(new URL(DECK_URL))); 
    label.setText("DECK"); 
    label.setHorizontalTextPosition(JLabel.CENTER); 
    label.setVerticalTextPosition(JLabel.BOTTOM); 
    
  2. Đối với vấn đề định vị boong, bạn có thể sử dụng trình quản lý bố cục khác như BorderLayout cho bảng điều khiển bên ngoài và một lớp lưu lượng mặc định ut cho bảng điều khiển boong. Các thẻ vẫn sẽ là GridLayout. Nó thường hữu ích để tấm tổ khi bạn cần phải

Ví dụ

enter image description here

import java.awt.BorderLayout; 
import java.awt.GridLayout; 
import java.net.URL; 

import javax.swing.ImageIcon; 
import javax.swing.JLabel; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

public class GuiTest { 

    private static final String DECK_URL = "http://i.stack.imgur.com/xNffR.png"; 
    private static final String CARD_URL = "http://i.stack.imgur.com/uVS1D.png"; 

    private static JPanel createDeckPanel() { 
     JPanel panel = new JPanel(); 
     try { 
      JLabel label = new JLabel(new ImageIcon(new URL(DECK_URL))); 
      label.setText("DECK"); 
      label.setHorizontalTextPosition(JLabel.CENTER); 
      label.setVerticalTextPosition(JLabel.BOTTOM); 
      panel.add(label); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
     return panel; 
    } 

    private static JPanel createCenterPanel(int rows, int cols) { 
     JPanel panel = new JPanel(new GridLayout(rows, cols)); 
     for (int i = 0; i < rows*cols; i++) { 
      try { 
       panel.add(new JLabel(new ImageIcon(new URL(CARD_URL)))); 
      } catch (Exception ex) { 
       ex.printStackTrace(); 
      } 
     } 
     return panel; 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable(){ 
      public void run() { 
       JPanel panel = new JPanel(new BorderLayout()); 
       panel.add(createDeckPanel(), BorderLayout.LINE_START); 
       panel.add(createCenterPanel(2, 6)); 
       JOptionPane.showMessageDialog(null, panel); 
      } 
     }); 
    } 
} 
Các vấn đề liên quan