简体   繁体   English

使用BorderLayout的Java按钮放置

[英]Java Button Placement using BorderLayout

This code displays nothing, I have exhausted many avenues but it does not display anything on the GUI (I have a main class that calls this as well already). 这段代码什么也不显示,我已经用尽了很多方法,但是在GUI上却什么也不显示(我已经有一个主类也已经调用了它)。 Please help. 请帮忙。 I am trying to put the two JButtons horizontally at the bottom of the page and the JTextField and JLabel at the center of the screen. 我试图将两个JButton水平放置在页面底部,并将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);

        }


    }

Your code is a bit over-complicated. 您的代码有点复杂。 You only need two panels, centre , and buttons . 您只需要两个面板, centrebuttons There are two reasons your UI is not showing up: 您的用户界面没有显示的原因有两个:

  1. You never added the panels to the frame 您从未将面板添加到框架
  2. You never set visible to true(Achieve this by using setVisible(true) ), unless you did this in the class you ran it in. 您永远不会将visible设置为true(通过使用setVisible(true) ),除非您在运行它的类中做到了。

One simple way to achieve your desired UI is like so(I added a main method to show the window): 实现所需UI的一种简单方法是这样的(我添加了一个main方法来显示窗口):

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

And it shows the window: 它显示了窗口:

窗口

I got closer but its not pretty code, the JFrame is 500x500 so this works based on that... any better suggestions than what I have? 我走近了,但它的代码不是很漂亮,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);
    }


}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM