如何修复JButton位置

时间:2015-06-26 23:16:56

标签: java swing jbutton layout-manager

以前我问了一个关于这个程序的问题,我和你们一起解决了这个问题。现在我在第一个面板上创建了一个包含形状游戏的新面板。所以我试着在新面板上设置JButton。但我无法改变Jbuttons的位置。 我正在尝试设置新面板的中心。我已经尝试过FLowLayout(),BorderLayout()和setBounds();出了点问题。

以前的问题; How to move JFrame shape

public class myshapestry extends JFrame implements ActionListener {

JFrame frame=new JFrame("Deneme");

 Startthegame panelstart= new Startthegame();
Container l ;

JLabel statusbar = new JLabel("default");
static JButton start;
static JButton exit;

 myshapestry() {

     l=this.getContentPane();
     this.setLayout(null);

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     frame.pack();
     frame.setLocationRelativeTo(null);

     frame.add(panelstart);
     frame.add(statusbar, BorderLayout.SOUTH);

        frame.setVisible(true);
        frame.setSize(getPreferredSize());

       start = new JButton("Start");
       exit = new JButton("Exit");


       panelstart.add(start);
       panelstart.add(exit);




    }

 public Dimension getPreferredSize() {
       return new  Dimension(500,600);
   }

   public static void main (String args[]){
       myshapestry tr=new myshapestry();
       tr.setTitle("Game of Shapes");

    } 

   public class Startthegame extends JPanel {

   }







   }

1 个答案:

答案 0 :(得分:2)

您从JFrame延伸,但在课程中创建JFrame的新实例并与两者进行交互,这只会让问题混乱。从摆脱extends JFrame开始,您不会在课程中添加任何新功能,而只是将您锁定在一个用例中

static不是你的朋友,你应该尽可能避免使用它。在这种情况下,您可以将按钮移动到Startthegame。这是对工作单位的隔离责任的基本OO原则。

要使按钮在容器内水平和垂直居中,您可以使用GridBagLayout

public class Startthegame extends JPanel {

    private JButton start;
    private JButton exit;

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

        start = new JButton("Start");
        exit = new JButton("Exit");

        add(start);
        add(exit);
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(500, 600);
    }

}

您还应该在建立基本用户界面后致电setVisible,否则您可能会在未显示的组件中结束

例如......

enter image description here

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class MyShapesTry {

    JFrame frame = new JFrame("Deneme");

    Startthegame panelstart = new Startthegame();
    Container l;

    JLabel statusbar = new JLabel("default");

    public MyShapesTry() {

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(panelstart);
        frame.add(statusbar, BorderLayout.SOUTH);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

    }

    public static void main(String args[]) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                MyShapesTry tr = new MyShapesTry();
            }
        });
    }

}