You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Swing:如何将冒泡排序结果传递至另一类的JLabel

解决方法

核心思路是让冒泡排序方法生成并返回排序过程的输出字符串,而非直接打印到控制台,这样UI类就能拿到内容并显示在JLabel中,同时完全保留排序算法的核心逻辑。

1. 重构BubbleSortNames类

修改bubbleSort方法,用StringBuilder收集每一步的排序状态,最后返回完整的输出字符串。原有的排序逻辑丝毫不改,仅把控制台输出改为字符串收集,原有测试功能也能正常使用。

import java.util.Arrays;

public class BubbleSortNames {

    public static void main(String[] args) {
        String[] names = {"Schmitt", "Jakob", "Oray", "Gross", "Müller","Schütz","Knapp"};
        // 调用重构后的方法,获取输出并打印(保留原有控制台输出功能)
        String sortOutput = bubbleSort(names);
        System.out.println(sortOutput);
        System.out.println("Alphabetisch sortierte Namen: " + Arrays.toString(names));
    }

    // 重构为返回排序过程的字符串
    public static String bubbleSort(String[] array) {
        int n = array.length;
        boolean swapped;
        StringBuilder output = new StringBuilder();

        for (int i = 0; i < n - 1; i++) {
            swapped = false;

            for (int j = 0; j < n - 1 - i; j++) {
                if (array[j].compareTo(array[j + 1]) > 0) {
                    String temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                    swapped = true;
                }
                // 将每一步的数组状态添加到StringBuilder
                output.append(Arrays.toString(array)).append("\n");
            }

            if (!swapped) break;
        }
        return output.toString();
    }
}

2. 修改MeinFrame类

在按钮点击事件中,直接调用重构后的bubbleSort方法获取输出字符串,将字符串转为HTML格式(让JLabel支持多行显示),并调整标签位置确保显示在窗口内。

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;

public class MeinFrame extends JFrame implements ActionListener{

    JButton button;
    JLabel ausgabe;
    
    MeinFrame(){
        ausgabe = new JLabel();
        // 调整标签位置和大小,确保在窗口内显示
        ausgabe.setBounds(20, 160, 680, 300);
        ausgabe.setFont(new Font("Calibri", Font.PLAIN,20));
        ausgabe.setText("Test");
        // 支持HTML格式,设置内容从顶部开始显示
        ausgabe.setVerticalAlignment(JLabel.TOP);

        JLabel label = new JLabel();
        label.setText("Bitte Wähle eine Sortier Methode");
        label.setFont(new Font("Calibri",Font.PLAIN,25));
        label.setBounds(200, 0, 720, 100);

        button = new JButton();
        button.setBounds(200,100,100,50);
        button.addActionListener(this);
        button.setText("Bubble sort");
        button.setFocusable(false);

        this.setTitle("Sortier Algorythmen");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(720,480);
        this.setLayout(null); // 配合setBounds使用空布局
        this.add(label);
        this.add(button);
        this.add(ausgabe);
        this.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==button){
            // 准备待排序数组
            String[] names = {"Schmitt", "Jakob", "Oray", "Gross", "Müller","Schütz","Knapp"};
            // 获取排序过程的输出字符串
            String sortOutput = BubbleSortNames.bubbleSort(names);
            // 转换为HTML格式实现多行显示
            ausgabe.setText("<html>" + sortOutput.replace("\n", "<br>") + "</html>");
        }
    }
}

关键改动说明

  • 不破坏排序逻辑:仅把System.out.println替换为StringBuilder.append,排序的循环、交换逻辑完全保留。
  • 复用性提升:bubbleSort方法现在既支持控制台输出,也支持UI显示,符合单一职责原则。
  • 多行显示处理:利用JLabel对HTML的支持,用<br>替换换行符,实现多行内容展示,同时设置垂直对齐为顶部,避免内容挤压。

内容的提问来源于stack exchange,提问作者Moritz Wolf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 00:50:55