2013-11-16 2 views
1

Привет, ребята, я пытаюсь создать черновик в Java, и я использую JPanels для представления квадратов, если бы я изменил размер панелей, как бы это сделать? если я использую менеджер компоновки, квадраты не являются достаточно большими. На данный момент я не использую диспетчер компоновки, чтобы попытаться изменить размер, но размер, похоже, не меняется - он просто остается на 1,1 пикселя.Размер JPanel не меняется

private void createSquares(){ 
    for(int i = 0; i < 65; i++){ 
     squares[i] = new JPanel(); 
     squares[i].setLayout(null); 
     squares[i].setSize(20,20); 
     board.add(squares[i]); 
    } 
} 
+1

Да, используйте диспетчер компоновки. Нет, никогда не используйте макет «null». –

+1

Java GUI, возможно, придется работать на нескольких платформах, на разных разрешениях экрана и с использованием разных PLAF. Таким образом, они не способствуют точному размещению компонентов. Чтобы организовать компоненты для надежного графического интерфейса, вместо этого используйте менеджеров компоновки или [их комбинаций] (http://stackoverflow.com/a/5630271/418556), а также макеты и границы для [пробела] (http: //stackoverflow.com/q/17874717/418556). (Что сказал @HovercraftFullOfEels, но дольше.) –

+1

См. Также этот [пример] (http://stackoverflow.com/a/2562685/230513) и [вариант] (http://stackoverflow.com/a/2563350/230513). – trashgod

ответ

0

Вы всегда можете «заимствовать» изображение или два онлайн и поместить его в свою программу. Например, этот код:

import java.awt.GridLayout; 
import java.awt.Image; 
import java.awt.image.BufferedImage; 
import java.io.IOException; 
import java.net.URL; 
import java.util.*; 
import javax.imageio.ImageIO; 
import javax.swing.*; 

public class GetChessSquareImages { 
    public static final String PATH_TO_SQUARES = "http://www.colourbox.com/preview/" + 
     "4578561-622234-seamless-oak-square-chess-like-parquet-texture.jpg"; 
    private static final int IMG_SIDE_COUNT = 4; 
    private static final double SCALE = 0.8; 
    private Map<SquareColor, List<Icon>> squareColorMap = new HashMap<SquareColor, List<Icon>>(); 
    private Random random = new Random(); 

    public void downloadImages() throws IOException { 
     URL lrgImgUrl = new URL(PATH_TO_SQUARES); 
     BufferedImage largeImg = ImageIO.read(lrgImgUrl); 

     int w = largeImg.getWidth()/IMG_SIDE_COUNT; 
     int h = largeImg.getHeight()/IMG_SIDE_COUNT; 
     for (int i = 0; i < IMG_SIDE_COUNT; i++) { 
     int x = (i * largeImg.getWidth())/IMG_SIDE_COUNT; 
     for (int j = 0; j < IMG_SIDE_COUNT; j++) { 
      if (j != 1 && j != 2) { 
       int y = (j * largeImg.getHeight())/IMG_SIDE_COUNT; 
       extractSubImg(largeImg, i, j, x, y, w, h); 
      } 
     } 
     } 
    } 

    private void extractSubImg(BufferedImage largeImg, 
     int i, int j, int x, int y, int w, int h) { 
     Image subImg = largeImg.getSubimage(x, y, w, h); 
     int width = (int) (w * SCALE); 
     int height = (int) (h * SCALE); 
     subImg = subImg.getScaledInstance(width, height, Image.SCALE_SMOOTH); 
     List<Icon> iconList = null; 
     if (i % 2 == j % 2) { 
     iconList = squareColorMap.get(SquareColor.LIGHT); 
     if (iconList == null) { 
      iconList = new ArrayList<Icon>(); 
      squareColorMap.put(SquareColor.LIGHT, iconList); 
     } 
     } else { 
     iconList = squareColorMap.get(SquareColor.DARK); 
     if (iconList == null) { 
      iconList = new ArrayList<Icon>(); 
      squareColorMap.put(SquareColor.DARK, iconList); 
     } 
     } 
     iconList.add(new ImageIcon(subImg)); 
    } 

    public Icon getRandomIcon(SquareColor sqrColor) { 
     List<Icon> iconList = squareColorMap.get(sqrColor); 
     if (iconList == null) { 
     return null; 
     } else { 
     return iconList.get(random.nextInt(iconList.size())); 
     } 
    } 

    public static void main(String[] args) { 
     GetChessSquareImages getImages = new GetChessSquareImages(); 
     try { 
     getImages.downloadImages(); 
     } catch (IOException e) { 
     e.printStackTrace(); 
     System.exit(-1); 
     } 

     int side = 8;; 
     JPanel panel = new JPanel(new GridLayout(side , side)); 
     for (int i = 0; i < side; i++) { 
     for (int j = 0; j < side; j++) { 
      SquareColor sqrColor = (i % 2 == j % 2) ? SquareColor.LIGHT : SquareColor.DARK; 
      Icon icon = getImages.getRandomIcon(sqrColor); 
      panel.add(new JLabel(icon)); 
     } 
     } 
     JOptionPane.showMessageDialog(null, panel); 
    } 
} 

enum SquareColor { 
    DARK, LIGHT 
} 

возвращает это JPanel:

enter image description here

Тогда ваш размер квадратного будет основываться на размерах ваших ImageIcons. Например, я увеличил свои квадраты с коэффициентом масштабирования 0,8 (константа SCALE выше), чтобы сделать сетку более разумным.

Смежные вопросы