如何在单独行中显示JLabel?JavaX GUI

e5nszbig  于 2022-11-20  发布在  Java
关注(0)|答案(2)|浏览(109)

我希望在GUI中显示输出,如下图所示

但是当我在JLabel s上使用setText时,我最终得到了这样的结果

以下是显示我的文本的代码:

class StudentPanel extends JPanel {
    JLabel jlName;
    JLabel jlTitle;
    JLabel jlImageFile;
    JLabel jlGroup;
    JLabel jlDemoWhat;

    private JLabel student1image_2;

    public StudentPanel() {

        //jlName = new JTextArea("<html><body><\n>");
        jlName = new JLabel();
        add(jlName);

        jlTitle = new JLabel();
        add(jlTitle);

        jlImageFile = new JLabel();
        add(jlImageFile);

        jlGroup = new JLabel();
        add(jlGroup);

        jlDemoWhat = new JLabel();
        add(jlDemoWhat);
    }

    public void setStudent(Student s) {
        jlName.setText("Hi Prof, I am " + s.getName());
        jlTitle.setText("I am a " + s.getTitle());
        ImageIcon student1image = new ImageIcon(s.getImageFile());
        Image student1image_1 = student1image.getImage();
        Image student1Resized = student1image_1.getScaledInstance(260, 180, UNDEFINED_CONDITION);
        student1image = new ImageIcon(student1Resized);
        student1image_2 = new JLabel(student1image);
        add(student1image_2);

        jlGroup.setText(s.getGroup());
        jlDemoWhat.setText(s.getDemoWhat());
    }
}

有人知道怎么把它们分开吗?
非常感谢你。
我在谷歌上搜索了一下,但到目前为止还没有找到希望。

rqcrx0a6

rqcrx0a61#

在您的ctor StudentPanel()中,您可以使用
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));,然后再添加组件。

z4bn682m

z4bn682m2#

Oracle有一个很有用的教程Creating a GUI With Swing。跳过使用NetBeans IDE学习Swing部分。
您的代码无法运行,所以我创建了这个GUI。

Swing应用程序应该总是以SwingUtilitiesinvokeLater方法的调用开始。此方法确保在Event Dispatch Thread上创建和执行Swing组件。
您使用Swing组件。扩展Swing组件或任何Java类的唯一原因是当您希望覆盖一个或多个类方法时。
我硬编码了student值。您需要添加对Student类的引用。
下面是完整的可运行代码。

import java.awt.BorderLayout;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class StudentGUI implements Runnable {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new StudentGUI());
    }

    JLabel jlName;
    JLabel jlTitle;
    JLabel jlImageFile;
    JLabel jlGroup;
    JLabel jlDemoWhat;

    @Override
    public void run() {
        JFrame frame = new JFrame("Student Display");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        frame.add(createMainPanel(), BorderLayout.CENTER);
        addValues();

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

    private JPanel createMainPanel() {
        JPanel panel = new JPanel(new GridLayout(0, 1, 5, 5));
        panel.setBorder(BorderFactory.createEmptyBorder(0, 5, 5, 5));

        jlName = new JLabel();
        panel.add(jlName);

        jlTitle = new JLabel();
        panel.add(jlTitle);

        jlImageFile = new JLabel();
        panel.add(jlImageFile);

        jlGroup = new JLabel();
        panel.add(jlGroup);

        jlDemoWhat = new JLabel();
        panel.add(jlDemoWhat);

        return panel;
    }
    
    private void addValues() {
        jlName.setText("Hi Prof, I am " + "Heng 2");
        jlTitle.setText("I am a " + "Full Time Student");
        jlGroup.setText("I am from group T05");
        jlDemoWhat.setText("I wish to demo Assignment 2");
    }

}

相关问题