如何在java中使标签和文本字段显示在borderlayout中?

如何在java中使标签和文本字段显示在borderlayout中?,java,swing,jframe,jpanel,border-layout,Java,Swing,Jframe,Jpanel,Border Layout,如何使我的Jtextfiels、Jlabels和JtextArea显示在borderlayout中?我想让我的label1在北部,textarea在东部,其余的在西部。问题是它们没有出现,我的textfield似乎被挤在了左侧 这是我的密码: import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.io.*; public class ReliefFrame extends JFrame {

如何使我的Jtextfiels、Jlabels和JtextArea显示在borderlayout中?我想让我的label1在北部,textarea在东部,其余的在西部。问题是它们没有出现,我的textfield似乎被挤在了左侧

这是我的密码:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
public class ReliefFrame extends JFrame
{
    ReliefCenter s = new ReliefCenter("JavaCup");
    JPanel row;
    JPanel roww;
    JPanel rowww;
    JPanel rowwww;
    JLabel Label1;
    JLabel Label2;
    JLabel Label3;
    JLabel Label4;
    JButton[] button=new JButton[5];
    JTextField aTextField;
    JTextField bTextField;
    JTextField cTextField;
    JTextArea aTextArea;
    public ReliefFrame() {
        super("ReliefCenter");
        setSize(700, 700);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible( true );
        setLayout( new BorderLayout() );
        Label1= new JLabel("Welcome to JavaCup Relief Center");
        add(Label1);

        createNorthPanel();
        createEastPanel();
        createWestPanel();
        createSouthPanel();
        createaTextField();
        Label2= new JLabel("Relief Good",JLabel.LEFT);
        add(Label2);
        createbTextField();
        Label3= new JLabel("Quantity",JLabel.LEFT);
        add(Label3);
        createcTextField();
        Label4= new JLabel("Unit",JLabel.LEFT);
        add(Label4);
        createButton();
        createBButton();
        createCButton();
        createDButton();
        createEButton();
        createTextArea();
        add( row, "East" );
        add( roww, "West" );
        add( rowww, "North");
        add( rowwww, "South");
    }

    private void createNorthPanel()
    {
        rowww = new JPanel();
        rowww.setLayout( new BorderLayout( ) );
    }
    private void createEastPanel()
    {
        row = new JPanel();
        row.setLayout( new BorderLayout() );
    }
    private void createWestPanel()
    {
        roww = new JPanel();
        roww.setLayout( new GridLayout(6,1) );
    }
    private void createSouthPanel()
    {
        rowwww=new JPanel();
        rowwww.setLayout(new GridLayout(1,5));
    }
    private void createaTextField()
    {
        aTextField = new JTextField( "" );
        roww.add( aTextField );
    }

    private void createbTextField()
    {
        bTextField = new JTextField( "" );
        roww.add( bTextField );
    }

    private void createcTextField()
    {
        cTextField = new JTextField( "" );
        cTextField.setHorizontalAlignment(JTextField.LEFT);
        roww.add( cTextField );
    }
    private void createTextArea()
    {
        aTextArea = new JTextArea("" );
        aTextArea.setEditable(false);
        row.add(aTextArea);
    }   

    private void createButton()
    {
        button[0] = new JButton( "Add Good" );
        class ButtonListener implements ActionListener
        { 
            public void actionPerformed( ActionEvent ae )
            {
                String a = aTextField.getText();
                String b = bTextField.getText();
                String c = cTextField.getText();
                int d=Integer.parseInt(b);
                s.addNewGood(a,d,c);//
                aTextField.setText( "" ); 
                bTextField.setText( "" );
                cTextField.setText( "" );
                aTextArea.append("Added new good: "+a+"\n");           
            }
        }
        button[0].addActionListener( new ButtonListener() );
        rowwww.add( button[0] ); 
    }
    private void createBButton()
    {
        button[1] = new JButton( "Receive Goods" );
        class ButtonListener implements ActionListener
        { 
            public void actionPerformed( ActionEvent ae )
            {
                String a = aTextField.getText();
                String b = bTextField.getText();
                int d=Integer.parseInt(b);
                s.receiveGoods(a,d);//
                aTextField.setText( "" ); 
                bTextField.setText( "" );
                aTextArea.append("Received "+a+":"+d+"\n");                
            }
        }
        button[1].addActionListener( new ButtonListener() );
        rowwww.add( button[1] ); 
    }
    private void createCButton()
    {
        button[2] = new JButton( "Release Packs" );
        class ButtonListener implements ActionListener
        { 
            public void actionPerformed( ActionEvent ae )
            {
                String a = bTextField.getText();
                int b=Integer.parseInt(a);
                s.releasePacks(b);
                bTextField.setText( "" );           
            }
        }
        button[2].addActionListener( new ButtonListener() );
        rowwww.add( button[2] ); 
    }
    private void createDButton()
    {
        button[3] = new JButton( "Packs Released" );
        class ButtonListener implements ActionListener
        { 
            public void actionPerformed( ActionEvent ae )
            {
                int a=s.getPackCount();
                aTextArea.append("JavaCup has released"+a+"packs. \n");         
            }
        }
        button[3].addActionListener( new ButtonListener() );
        rowwww.add( button[3] ); 
    }
    private void createEButton()
    {
        button[4] = new JButton( "Inventory Report" );
        class ButtonListener implements ActionListener
        { 
            public void actionPerformed( ActionEvent ae )
            {

                aTextArea.append("===INVENTORY===\n");
                s.printInventory();
                aTextArea.append("===============\n");

            }
        }
        button[4].addActionListener( new ButtonListener() );
        rowwww.add( button[4] ); 
    }
    public static void main(String[] arguments) {
    ReliefFrame c = new ReliefFrame();
    }
}

BorderLayout
基于
preferredSize
工作。 因此,请尝试以下方法进行测试:

    ...
    add( row, BorderLayout.EAST );
    add( roww, BorderLayout.WEST );
    add( rowww, BorderLayout.NORTH);
    add( rowwww, BorderLayout.SOUTH);

    row.setPreferredSize(new Dimension(100,100));
    roww.setPreferredSize(new Dimension(100,100));
    rowww.setPreferredSize(new Dimension(100,100));
    rowwwww.setPreferredSize(new Dimension(100,100));
}
另外,添加标签时没有指定约束,因此
LayoutManager
不知道该做什么

因此,请尝试以下标签:

labelPanel = new JPanel();
labelPanel.setLayout(new GridLayout());

Label1= new JLabel("Welcome to JavaCup Relief Center");
labelPanel.add(Label1);

createNorthPanel();
createEastPanel();
createWestPanel();
createSouthPanel();
createaTextField();
Label2= new JLabel("Relief Good",JLabel.LEFT);
labelPanel.add(Label2);
createbTextField();
Label3= new JLabel("Quantity",JLabel.LEFT);
labelPanel.add(Label3);
createcTextField();
Label4= new JLabel("Unit",JLabel.LEFT);
labelPanel.add(Label4);

add(labelPanel, BorderLayout.CENTER);

请注意,我在
JPanel
中放置了一个
GridLayout
。您可以使用任何最适合您的
LayoutManager
。对于示例,我只选择了最简单的一个

您有几个问题:

  • 不要使用魔法值。“东”,“西”。。。都是没有在任何地方定义的魔法值。而是使用API提供的变量。BorderLayout.EAST,BorderLayout.WEST

  • 变量名不应以大写字符开头。有些变量是正确的,有些是不正确的。保持一致

  • 使用不返回您创建的组件的方法不是一个好主意。不需要为所有子面板定义实例变量。它们都应该是局部变量

  • 您的变量名(row、roww、rowww、rowww、label1、label2)非常糟糕。没人知道那指的是什么。如果要在整个代码中重用名称,则名称应该是描述性的

  • 在使用pack()和setVisible(true)之前,应将组件添加到框架中

  • 因此,更好的代码结构可能是:

    add(createNorthPanel(), BorderLayout.NORTH);
    add(createWestPanel(), BorderLayout.WEST);
    ...
    pack();
    setVisible( true );
    
    public JPanel createNorthPanel()
    {
        JPanel panel = new JPanel();
        JLabel quantity = new JLabel("Quantity");
        panel.add(quantity);
        JLabel unit = new JLabel("Unit");
        panel.add( unit );
    
        return panel;
    }
    
    createNorthPanel()的代码可能类似于:

    add(createNorthPanel(), BorderLayout.NORTH);
    add(createWestPanel(), BorderLayout.WEST);
    ...
    pack();
    setVisible( true );
    
    public JPanel createNorthPanel()
    {
        JPanel panel = new JPanel();
        JLabel quantity = new JLabel("Quantity");
        panel.add(quantity);
        JLabel unit = new JLabel("Unit");
        panel.add( unit );
    
        return panel;
    }
    
    现在,创建一个面板的所有逻辑都包含在一个地方


    您也不应该扩展JFrame,而是将组件添加到面板,然后将面板添加到框架。我建议您阅读关于工作代码的Swing教程,该教程演示了这种方法

    “救济中心”类别代码?米恩斯:你怎么画的?谢谢你的回答。Jlabel在位置上是否与Jtextfield相同?从容器的角度来看,它们都是
    JComponent
    ,在您的例子中是
    ReliefFrame
    内容窗格。你的问题是你在添加标签时没有申报违禁品。我将编辑我的答案,以便更好地举例说明