2016-03-25 3 views
1

Дополнительная помощь, необходимая для этого маленького проекта снова, на этот раз пытаясь получить две метки, которые находятся внутри панели в определенных положениях. Эти позиции лежат слева, а затем разделение пробелов (например, вкладка), а затем вторая метка, чтобы убрать строки, добавляемые под ними при нажатии кнопки, и я также не знаю, как начать.Как правильно выровнять метки?

Я загрузил изображение текущего выполнения программы:

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

Это ваш полный код? Пожалуйста, разместите свой полный код, чтобы я мог редактировать :) – Francisunoxx

+0

@MiaLegaspi Добавлен полный код, включая класс водителя – SkyPlus

+0

JTable будет лучше для ваших результатов студента JPanel. –

ответ

1

Найдите время, чтобы прочитать это наиболее гибкий менеджер компоновки, который обычно используется программистом :) https://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html

Btw Я отделить класс Bottom Panel Это немного запутавшись, читая его. Гораздо лучше попробуйте вложенные классы, чтобы ваш код был чистым и удобным для чтения. https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

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



    } 
} 

} 

и вот ваш кадр.

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

ВЫВОДА

enter image description here

Надеется, что это помогает. :)

+0

Спасибо за помощь, обучение на примере всегда хорошо работает со мной. Цените время – SkyPlus

+0

@SkyPlus Вы всегда рады :) Спасибо, что приняли мой ответ! – Francisunoxx

1

Если вы хотите, чтобы данные отображались в столбце, вам необходимо использовать соответствующий менеджер макета для достижения желаемого эффекта.

Возможно, вы можете использовать GridBagLayout. Вы можете иметь столбцы и пробелы между столбцами, но вам нужно использовать соответствующие ограничения. Прочтите раздел из руководства Swing по телефону How to Use GridBagLayout для получения дополнительной информации и рабочих примеров.

Однако проще использовать JTable, который является компонентом, предназначенным для отображения данных в строках/столбцах. Снова просмотрите учебник Swing по телефону How to Use Tables.

+0

Спасибо за помощь. Собираемся смотреть в столы прямо сейчас! – SkyPlus

Смежные вопросы