簡體   English   中英

面板填寫 Java swing window

[英]Panel fills the window in Java swing

我在 window 中添加了兩個 10x10 網格,但我無法讓它們以較小的尺寸顯示。 它們只是填滿了整個 window。我如何將它們以較小的尺寸整齊地放在中間,以便有一些標簽和按鈕的空間? 我粘貼了下面的代碼以供參考。

public static void main(String[] args) {
    window = new JFrame();
    window.setTitle("Battleship.exe");
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setPreferredSize(new Dimension(600, 600));
    
    P1_container = new JPanel(new GridLayout(10,10));
    P1_container.setBorder(BorderFactory.createLineBorder(Color.black, 5));
    
    compContainer = new JPanel(new GridLayout(10,10));
    compContainer.setBorder(BorderFactory.createLineBorder(Color.black, 5));
    
    grid = new JPanel[10][10];
    for (int i =0; i< 10; i++) {
        for (int j =0; j< 10; j++) {
            grid[i][j] = new JPanel();
            grid[i][j].setBackground(Color.white);
            grid[i][j].setBorder(BorderFactory.createLineBorder(Color.blue, 2));
            grid[i][j].setPreferredSize(new Dimension(25,25));
            P1_container.add(grid[i][j]);
        }
    }
    
    enemyGrid = new JPanel[10][10];
    for (int i =0; i< 10; i++) {
        for (int j =0; j< 10; j++) {
            enemyGrid[i][j] = new JPanel();
            enemyGrid[i][j].setBackground(Color.white);
            enemyGrid[i][j].setBorder(BorderFactory.createLineBorder(Color.red, 2));
            enemyGrid[i][j].setPreferredSize(new Dimension(25, 25));
            compContainer.add(enemyGrid[i][j]);
        }
    }
    
    GridLayout layout = new GridLayout(1, 2);
    layout.setHgap(150);
    mainPanel = new JPanel(layout); 
    
    mainPanel.add(P1_container);
    mainPanel.add(compContainer);
    
    window.add(mainPanel);
    window.pack();
    window.setVisible(true);
}

您的代碼有 24 個編譯錯誤。 修復編譯錯誤后,我修改了一行並注釋掉了一行以獲得此 GUI。

戰艦界面

這是完整的可運行代碼。

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class BattleshipGUI {
    
    public static void main(String[] args) {
        JFrame window = new JFrame();
        window.setTitle("Battleship.exe");
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//      window.setPreferredSize(new Dimension(600, 600));
        
        JPanel P1_container = new JPanel(new GridLayout(10,10));
        P1_container.setBorder(BorderFactory.createLineBorder(Color.black, 5));
        
        JPanel compContainer = new JPanel(new GridLayout(10,10));
        compContainer.setBorder(BorderFactory.createLineBorder(Color.black, 5));
        
        JPanel[][] grid = new JPanel[10][10];
        for (int i =0; i< 10; i++) {
            for (int j =0; j< 10; j++) {
                grid[i][j] = new JPanel();
                grid[i][j].setBackground(Color.white);
                grid[i][j].setBorder(BorderFactory.createLineBorder(Color.blue, 2));
                grid[i][j].setPreferredSize(new Dimension(25,25));
                P1_container.add(grid[i][j]);
            }
        }
        
        JPanel[][] enemyGrid = new JPanel[10][10];
        for (int i =0; i< 10; i++) {
            for (int j =0; j< 10; j++) {
                enemyGrid[i][j] = new JPanel();
                enemyGrid[i][j].setBackground(Color.white);
                enemyGrid[i][j].setBorder(BorderFactory.createLineBorder(Color.red, 2));
                enemyGrid[i][j].setPreferredSize(new Dimension(25, 25));
                compContainer.add(enemyGrid[i][j]);
            }
        }
        
        GridLayout layout = new GridLayout(0, 2);
        layout.setHgap(150);
        JPanel mainPanel = new JPanel(layout); 
        
        mainPanel.add(P1_container);
        mainPanel.add(compContainer);
        
        window.add(mainPanel);
        window.pack();
        window.setVisible(true);
    }

}

使用 Swing 布局管理器的關鍵是嵌套容器。

將 mainPanel 嵌套到另一個 JPanel 中,該 JPanel 使用可幫助您實現目標的布局,比如 BorderLayout 將 mainPanel 放入 BorderLayout.CENTER position。然后將其他 gui 組件添加到同一外部 JPanel 的其他 BorderLayout 位置。

如果您不想讓 mainPanel 展開,則使用不同的不會展開的外部布局,例如 FlowLayout。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM