如何正确对齐标签?

时间:2016-03-25 14:46:13

标签: java swing user-interface

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

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

image

正如你所看到的,我有两个按钮(可能会在某个时刻变为一个),然后是一个单独的结果面板,当前有两个标签位于我要移动的位置。我想要'姓名'在左侧和'等级'稍微向右(由大约一个标签空间分隔)。我还不确定这两条小线是什么,如果有人可以向我解释那就太好了。

我计划使用此功能,然后输入一个按钮,以便在这些标签下面输入一个名称条目,并在这些标签下面输入一个等级条目,每次按下按钮都会保持更新。如果有人能指导我朝着正确的方向前进,那就太好了。我已经为下面的面板提供了代码。

感谢您花时间阅读本文!

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);
}}

2 个答案:

答案 0 :(得分:1)

花时间阅读这个程序员常用的最灵活的布局管理器:) https://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html

顺便说一句,我把你的班级import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class Test1 { public static void main(String[] args) { // create a firefox web driver WebDriver driver = new FirefoxDriver(); // open webpage driver.get("C:\\Users\\ajhavar.INOVATE\\Desktop\\Training_Docs\\Sample_WebAPI_Client\\ptt_Latest.html"); //driver.get("http://www.indeed.com"); //find setup button and click it driver.findElement(By.id("setup_web")).click(); //Alert alert =driver.switchTo().alert(); //alert.accept(); //find initializecall button and click it //driver.findElement(By.id("initializeCallBacksbutton")).click(); 分开了。阅读时有点困惑。更好的方法是尝试使用嵌套类来查看代码清晰易读。 https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

Bottom Panel

这是你的框架。

    import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
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());


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

    setLayout(new BorderLayout());
    GridBagConstraints nameResultConstraints = new GridBagConstraints();//Constraints
    GridBagConstraints gradeResultConstraints = new GridBagConstraints();//Constraints


    //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);

    myBottomPanel mybottompanel = new myBottomPanel();//Object

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

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

public class myBottomPanel extends JPanel{
    public myBottomPanel()
    {
        this.setLayout(new GridBagLayout());

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

         //Constraints
        GridBagConstraints nameResultConstraints = new GridBagConstraints();
        GridBagConstraints gradeResultConstraints = new GridBagConstraints();

        //Bottom Panel
        setBorder(BorderFactory.createTitledBorder("Students/Results"));
        setOpaque(false);
        setPreferredSize(new Dimension(0 , 100));

        nameResultConstraints.anchor = GridBagConstraints.LINE_START;
        nameResultConstraints.weightx = 0.5;
        nameResultConstraints.weighty = 0.5;

        add(nameResult,nameResultConstraints);
        add(gradeResult);

    }
}
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);



    }
}

}

<强>输出

enter image description here

希望这会有所帮助。 :)

答案 1 :(得分:1)

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

也许你可以使用GridBagLayout。您可以在列之间包含列和空格,但是您需要使用适当的约束。阅读How to Use GridBagLayout上Swing教程中的部分,了解更多信息和工作示例。

但是,更简单的选择是使用JTable,它是为行/列中的显示数据设计的组件。再次查看How to Use Tables上的Swing教程。