使用BorderLayout的Java Button Placement

时间:2017-05-22 21:30:54

标签: java swing user-interface jpanel jbutton

此代码没有显示任何内容,我已经用尽了许多途径,但它没有在GUI上显示任何内容(我有一个主类也已经调用了这个)。请帮忙。我试图将两个JButtons水平放在页面的底部,JTextField和JLabel放在屏幕的中心。

package test;

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

public class Gui extends JFrame {
    private JLabel label;
    private JButton clear;
    private JButton copy;
    private JTextField textfield;

    public Gui(){

        super("test");

        clear = new JButton("Clear");
        copy = new JButton("Copy");
        label = new JLabel("");
        textfield = new JTextField("enter text here");

        JPanel bottom = new JPanel(new BorderLayout());

        JPanel subBottom = new JPanel();
        subBottom.add(copy);
        subBottom.add(clear);


        JPanel centre = new JPanel (new BorderLayout());

        JPanel subCentre = new JPanel();
        subCentre.add(label);
        subCentre.add(textfield);





        bottom.add(subBottom, BorderLayout.PAGE_END);
        centre.add(subCentre, BorderLayout.CENTER);

        }


    }

2 个答案:

答案 0 :(得分:3)

您的代码有点过于复杂。您只需要两个面板centrebuttons。您的UI未显示有两个原因:

  1. 您从未将面板添加到框架
  2. 您永远不会将visible设置为true(使用setVisible(true)实现此目的),除非您在运行它的类中执行此操作。
  3. 实现所需UI的一种简单方法就是这样(我添加了一个显示窗口的主方法):

    import javax.swing.*;
    import java.awt.*;
    public class test extends JFrame {
        public Test() {
            super("test");
            JPanel buttons = new JPanel();
            JPanel centre = new JPanel();
            add(buttons, BorderLayout.SOUTH); //these lines add the 
            add(centre, BorderLayout.CENTER); //panels to the frame
            JButton clear = new JButton("Clear");                     // No need
            JButton copy = new JButton("Copy");                       // to declare
            JLabel label = new JLabel("Label");                       // these
            JTextField textfield = new JTextField("enter text here"); // privately
            buttons.add(copy); 
            buttons.add(clear);
            centre.add(label);
            centre.add(textfield);
            pack();
            setLocationRelativeTo(null);
            setVisible(true);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
        } //end constructor
    
        //added main method to run the UI
        public static void main(String[] args) {
            new Experiments();
        } //end main
    } //end class
    

    它显示了窗口:

    Window

答案 1 :(得分:2)

我离得更近了,但它不是漂亮的代码,JFrame是500x500,所以这是基于那个......比我有更好的建议吗?

package lab6;

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

public class Gui extends JFrame {
    private JLabel label;
    private JButton clear;
    private JButton copy;
    private JTextField textfield;

    public Gui(){

        super("test");

        clear = new JButton("Clear");
        copy = new JButton("Copy");
        label = new JLabel("label");
        textfield = new JTextField("enter text here");

        JPanel masterPanel = new JPanel(new BorderLayout());

        JPanel top = new JPanel();
        top.setPreferredSize(new Dimension(100, 200));

        JPanel bottom = new JPanel();

        JPanel subBottom = new JPanel();
        subBottom.add(copy);
        subBottom.add(clear);


        JPanel centre = new JPanel ();

        JPanel subCentre = new JPanel();
        subCentre.add(label);
        subCentre.add(textfield);


        bottom.add(subBottom);
        centre.add(subCentre);

        masterPanel.add(bottom, BorderLayout.PAGE_END);
        masterPanel.add(top, BorderLayout.PAGE_START);
        masterPanel.add(centre, BorderLayout.CENTER);


        add(masterPanel);
    }


}