簡體   English   中英

更改JButton大小的問題

[英]Issue with changing JButton size


我正在嘗試使用Swing庫制作掃雷游戲(僅用於培訓)。 當我嘗試使用setSize()方法(Container類的一部分)更改按鈕的大小時,發現一個問題。 我以前的程序之一能夠(使用ActionListener)處理該問題

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class ButtonChanger extends JFrame {

JButton big, small, dis;
JLabel message, poof;

public ButtonChanger(){
    setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();

    message = new JLabel("Click to make it");
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx = 0;
    c.gridy = 0;
    add(message, c);


    big =  new JButton("BIG");
    big.setSize(30, 30); // no reaction for this call 
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx = 0;
    c.gridy = 1;
    c.gridwidth = 1;
    add(big, c);


    small = new JButton("small");
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx = 1;
    c.gridy = 1;
    add(small, c);


    dis = new JButton("disapear");
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx = 3;
    c.gridy = 1;
    add(dis, c);

    poof = new JLabel("  poof!");
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx = 3;
    c.gridy = 1;
    poof.setVisible(false);
    add(poof, c);

    big.setSize(300,300); // same story

    event a = new event();
    big.addActionListener(a);
    small.addActionListener(a);
    dis.addActionListener(a);
}

public class event implements ActionListener{
    public void actionPerformed(ActionEvent a){

        String op = a.getActionCommand();

        if(op.equals("BIG")){
            big.setSize(50,50); // finaly!
        } else if(op.equals("small")){
            small.setSize(10,10);
        } else if(op.equals("disapear")){
            dis.setVisible(false);
            poof.setVisible(true);
        } 

    }
}

public static void main(String args[]){
    ButtonChanger gui = new ButtonChanger();
    gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    gui.setVisible(true);
    gui.setSize(250,250);
    gui.setTitle("");
}
}

但是,當我嘗試在此處使用相同的解決方案時-沒有任何反應。

import java.util.Random;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class Board extends JPanel
               implements ActionListener{
private Integer pixelWidth;
private Integer pixelHeight;
public Field[][] board;


private Random generator = new Random();

public Board(int width,int height){ // width - x axis scaled with "button" unit
    // height -  y axis scaled with "button" unit

    setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();

    board = new Field[width][height];

    pixelWidth = width * Field.fieldW;
    pixelHeight = height * Field.fieldH;

    for(int i = 0;i < height;i++)
        for(int j = 0;j < width;j++){
            board[i][j] = new Field(generator.nextBoolean());
        }

    for(int i = 0;i < height;i++){
        c.fill = GridBagConstraints.HORIZONTAL;
        c.gridy = i;
        for(int j = 0;j < width;j++){
            c.gridx = j;
            add(board[i][j].getFieldButton(),c);
            add(board[i][j].getFieldLabel(),c);
        }
    }

/*  for(int i = 0;i < height;i++)
        for(int j = 0;j < width;j++){
            board[i][j].setField();
        }*/

}
public void actionPerformed(ActionEvent e){
    String co = e.getActionCommand();
    if(co.equals(" ")){ // button is single space sign  
        for(int i = 0;i < 10;i++)
            for(int j = 0;j < 10;j++){
                board[i][j].setField(); //inside this method is call for setSize() for fieldButton
                }
    }
}
}

以前,我更改了Board類,使其在JFrame(在整個代碼中設置為主GUI框架)之后變得猶豫不決,但這給了我與原始輸出相同的輸出。

我搞砸了嗎?

big =  new JButton("BIG");
big.setSize(30, 30); // no reaction for this call 
c.fill = GridBagConstraints.HORIZONTAL;

對於big.setSize...沒有反應,因為然后在GridBagConstraints中將填充設置為水平,因此按鈕將被“拉伸”以水平填充。

而是使用c.fill = GridBagConstraints.NONE

當組件的顯示區域大於組件的請求大小時使用,以確定是否以及如何調整組件的大小。 有效值(定義為GridBagConstraints常量)包括NONE(默認值),HORIZONTAL(使組件足夠寬以水平填充其顯示區域,但不更改其高度),VERTICAL(使組件足夠高以垂直填充其顯示區域) ,但不要更改其寬度)和兩者(使組件完全填滿其顯示區域)。

您可以在此處了解更多信息: https : //docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html

暫無
暫無

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

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