setPreferredSize()在我的JButton中工作

时间:2015-12-27 02:51:51

标签: java resize jbutton

我用Java创建了一个Tic Tac Toe游戏,我似乎是一个问题,我无法摆脱:(。我无法重新调整我的按钮。我尝试了两个尝试setSize和setPreferredSize但似乎工作:

这是setPreferedSize pic: enter image description here

和代码:

import java.awt.Dimension;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

import sun.org.mozilla.javascript.internal.xml.XMLLib.Factory;



public class TicTacToe {
    JFrame frame;
    JPanel contentPane;
    JButton row1col1;
    JButton row1col2;
    JButton row1col3;
    JButton row2col1;
    JButton row2col2;
    JButton row2col3;
    JButton row3col1;
    JButton row3col2;
    JButton row3col3;   


    public TicTacToe() {
        // TODO Auto-generated constructor stub

        frame = new JFrame("Fds");
        contentPane = new JPanel();
        contentPane.setLayout(new BoxLayout(contentPane,BoxLayout.Y_AXIS));

        row1col1 = new JButton();
        row1col1.setPreferredSize(new Dimension(600,600));
        contentPane.add(row1col1);

        row1col2 = new JButton();
        row1col2.setPreferredSize(new Dimension(600,600));
        contentPane.add(row1col2);

        frame.setContentPane(contentPane);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);


    }


    private static void runGUI() {
         JFrame.setDefaultLookAndFeelDecorated(true);
         TicTacToe greeting = new TicTacToe();
         }
         public static void main(String[] args) {
         /* Methods that create and show a GUI should be
         run from an event-dispatching thread */
         javax.swing.SwingUtilities.invokeLater(new Runnable() {
         public void run() {
         runGUI();
         }
         });


         }


}

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:1)

BoxLayout尊重组件的最大大小。

在您的情况下,最大尺寸小于首选尺寸。

但是,解决方案不是使用首选/最大尺寸。

相反,您可以使用:

button.setMargin( new Insets(10, 10, 10, 10) );

控制按钮的大小,然后可以正常布局管理,因为首选大小将被正确计算。

答案 1 :(得分:1)

正如Camickr所述,BoxLayout尊重最大尺寸,但话虽如此,为什么要使用BoxLayout?相反,我建议:

  • 如果您想创建一个JButtons网格,请使用GridLayout,因为它擅长创建网格。
  • 只要您打包GUI并且所有组件的大小相同,它在某种程度上会尊重首选大小,
  • 但话虽如此,请不要设置尺寸。对于tic tac toe,将JLabel的字体设置为大的字体,或者将JLabel与大的ImageIcons一起使用,以便GUI正确设置自己的大小。
  • 您应该使用JButton的数组或2D数组来简化编码。

例如,请在这里查看我的代码:Java: Drawing using Graphics outside the class which draws the main canvas使用程序员创建的ImageIcons并创建此GUI:

enter image description here

或者我的答案中的代码:How to wait for a MouseListener mouse press?使用字体大小来创建此GUI:

enter image description here