Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何正确对齐标签?_Java_Swing_User Interface - Fatal编程技术网

Java 如何正确对齐标签?

Java 如何正确对齐标签?,java,swing,user-interface,Java,Swing,User Interface,我的这个小项目需要更多的帮助,这一次,我试图在一个面板的特定位置获得两个标签。这些位置是左边的一个,然后是一个空格分隔(如标签),然后是第二个标签,当按下一个按钮时,在它们下面添加条目,我也不确定如何开始 我上传了当前正在运行的程序的图像: 如您所见,我有两个按钮(可能在某个点更改为一个),然后是一个单独的结果面板,其中当前有两个标签,我想移动。我希望“Name”在左边,“Grade”在右边稍微多一点(用大约相当于一个标签页的空间隔开)。我也不确定这两行是什么,所以如果有人能向我解释一下,那就

我的这个小项目需要更多的帮助,这一次,我试图在一个面板的特定位置获得两个标签。这些位置是左边的一个,然后是一个空格分隔(如标签),然后是第二个标签,当按下一个按钮时,在它们下面添加条目,我也不确定如何开始

我上传了当前正在运行的程序的图像:

如您所见,我有两个按钮(可能在某个点更改为一个),然后是一个单独的结果面板,其中当前有两个标签,我想移动。我希望“Name”在左边,“Grade”在右边稍微多一点(用大约相当于一个标签页的空间隔开)。我也不确定这两行是什么,所以如果有人能向我解释一下,那就太好了

我计划这样做的地方是,一个按钮条目将导致在这些标签下面输入一个姓名条目,并在这些标签下面输入一个等级条目,该条目将随着每次按下按钮而不断更新。如果有人能为我指引正确的方向,那就太好了。我已经为下面的面板提供了代码

感谢您抽出时间阅读此文章

import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import java.util.Scanner;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField; 

public class GradePanel2 extends JPanel {

private JButton addEntry, calculate;
private JLabel name, grade, nameResult, gradeResult;
private JTextField nameField, gradeField, resultField;

public GradePanel2() {

    // Button to add entry to list
    addEntry = new JButton("Add entry to list");
    addEntry.addActionListener(new buttonListener());

    // Button to print all entries in correct format
    calculate = new JButton("Print all user grades");
    calculate.addActionListener(new buttonListener());

    //Create Labels
    name = new JLabel("Enter student name: ");
    nameField = new JTextField(10);
    nameField.addActionListener(new buttonListener());

    grade = new JLabel("Enter students mark: ");
    gradeField = new JTextField(5);
    gradeField.addActionListener(new buttonListener());

    //Result Labels
    nameResult = new JLabel("NAME");
    gradeResult = new JLabel("GRADE");


    //Bottom segment for result
    resultField = new JTextField();
    resultField.setOpaque(false);
    resultField.setEditable(false);

    setLayout(new BorderLayout());

    //Bottom Panel
    JPanel GradePanel = new JPanel();
        GradePanel.setBorder(BorderFactory.createTitledBorder("Students/Results"));
    GradePanel.setOpaque(false);
    GradePanel.setPreferredSize(new Dimension(0 , 100));
    GradePanel.add(resultField);
    resultField.setAlignmentX(LEFT_ALIGNMENT);
    GradePanel.add(nameResult);
    GradePanel.add(gradeResult);

    //Button Panel
    JPanel ButtonPane = new JPanel();
    ButtonPane.setLayout(new BoxLayout(ButtonPane, BoxLayout.PAGE_AXIS));
    addEntry.setAlignmentX(CENTER_ALIGNMENT);
    calculate.setAlignmentX(CENTER_ALIGNMENT);
    ButtonPane.add(addEntry);
    ButtonPane.add(Box.createVerticalStrut(10));
    ButtonPane.add(calculate);

    //Label Panel
    JPanel labelPane = new JPanel();
    labelPane.setLayout(new BoxLayout(labelPane, BoxLayout.PAGE_AXIS));
    labelPane.add(name);
    labelPane.add(Box.createRigidArea(new Dimension (5,0)));
    labelPane.add(nameField);
    labelPane.add(Box.createRigidArea(new Dimension (0,2)));
    labelPane.add(grade);
    labelPane.add(Box.createRigidArea(new Dimension (5,0)));
    labelPane.add(gradeField);

    //Add all panels to the main panel
    add(labelPane, BorderLayout.NORTH); 
    add(ButtonPane, BorderLayout.CENTER);
    add(GradePanel, BorderLayout.SOUTH);

    setBackground(Color.WHITE);
    setPreferredSize(new Dimension(400, 300));
}

public class buttonListener implements ActionListener{

    public void actionPerformed(ActionEvent event){

        String studentName;
        int studentMark;

        studentName = nameField.getText();
        String intMark = gradeField.getText();
        studentMark = Integer.parseInt(intMark);



    }
}

}
然后是驱动程序类:

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class Grade2{
public static void main(String[] args) {
Runnable runnable = new Runnable() {
    @Override
    public void run() {

        JFrame frame = new JFrame("Grade Calculator");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        GradePanel2 panel = new GradePanel2();
        frame.add(panel);

        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);

    }
};
    SwingUtilities.invokeLater(runnable);
}}

花点时间阅读这篇文章,这是程序员常用的最灵活的布局管理器:)

顺便说一句,我把你的课分开
底部面板
读的时候有点困惑。最好尝试嵌套类,使代码看起来干净且易于阅读。

这是你的相框

    import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class Grade2{
public static void main(String[] args) {
Runnable runnable = new Runnable() {
    @Override
    public void run() {

        JFrame frame = new JFrame("Grade Calculator");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        GradePanel2 panel = new GradePanel2();
        frame.add(panel);

        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);

    }
};
    SwingUtilities.invokeLater(runnable);
}}
输出


希望这有帮助。:)

如果希望在列中显示数据,则需要使用适当的布局管理器来实现所需的效果

也许您可以使用
GridBagLayout
。可以在列之间设置列和空格,但需要使用适当的约束。有关更多信息和工作示例,请阅读上Swing教程的部分


然而,更容易的选择是使用JTable,它是一个设计用于以行/列显示数据的组件。再次查看上的Swing教程。

这是您的完整代码吗?请发布您的完整代码,以便我可以编辑:)@MiaLegaspi添加了完整代码,包括驱动程序classA JTable,这对您的学生成绩更好JPanel。谢谢您的帮助。现在就去看看桌子!谢谢你的帮助,以身作则对我来说总是很好的。欣赏time@SkyPlus不客气:)谢谢你接受我的回答!
    import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class Grade2{
public static void main(String[] args) {
Runnable runnable = new Runnable() {
    @Override
    public void run() {

        JFrame frame = new JFrame("Grade Calculator");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        GradePanel2 panel = new GradePanel2();
        frame.add(panel);

        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);

    }
};
    SwingUtilities.invokeLater(runnable);
}}