sususususu 发表于 2024-5-27 18:22:07

CardLayouDemo输出问题

import java.awt.*;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class CardLayoutDemo {
    Frame fr = new Frame();
    String[] names = { "第一张", "第二张", "第三张", "第四张", "第五张" };
    Panel pan = new Panel();
    public void init(){
      final CardLayout c = new CardLayout(); //卡片局部
      pan.setLayout(c);
      for (int i = 0; i < names.length; i++) {
            pan.add(names,new Button(names));
      }
      Panel p1 = new Panel();

      Button previous = new Button("上一张");
      previous.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                c.previous(pan);
            }
      });

      Button next = new Button("下一张");
      next.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                c.next(pan);
            }
      });

      Button first = new Button("第一张");
      first.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                c.first(pan);
            }
      });

      Button last = new Button("最后一张");
      last.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                c.last(pan);
            }
      });

      Button third =new Button("第三张");
      third.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                c.show(pan,"第三张");
            }
      });

      p1.add(previous);
      p1.add(next);
      p1.add(first);
      p1.add(last);
      p1.add(third);
      fr.add(pan);
      fr.add(p1, BorderLayout.SOUTH);

      fr.pack();
      fr.setVisible(true);
    }

    public static void main(String[] args) {
      new CardLayoutDemo().init();
    }
}

为什么输出只有空格,没有相应的文字说明?

不二如是 发表于 2024-5-27 18:22:08

在鱼油的代码中,已成功使用 CardLayout 管理面板中的 Button 组件。

但输出只有空格而没有相应的文字说明,是由于在添加 Button 时传入了正确的 names 作为按钮的显示文本,但未能在按钮上看到预期的文字。

可能是因为按钮的文本未正确设置或显示。

代码中按钮应该已正确设置了标签(即 new Button(names)),所以这应该不是问题的根本原因。

问题可能出现在GUI元素的显示或刷新上。下面是几个可能的解决方法:


[*]1. 确保 Frame 可见性设置在添加所有组件后: 代码已经做了这一点,通过 fr.setVisible(true) 在所有组件添加完成后设置窗口为可见,这是正确的做法。
[*]2. 增加窗口大小: 有时候,窗口的默认打包大小(pack() 方法)可能不足以显示所有组件,尤其是当组件数量多或布局复杂时。可以尝试在 pack() 调用后手动设置窗口大小,看是否能解决显示问题。
[*]3. 检查系统的默认字体和颜色设置: 如果系统的默认字体或颜色设置导致文字无法显示(例如,字体颜色和背景色相同),那么可能需要调整这些设置。
[*]4. 使用其他布局管理器检查问题: 有时候问题可能是由于布局管理器的特定行为导致。尝试使用不同的布局管理器,比如 FlowLayout 或 GridLayout,看看问题是否依旧存在。
[*]5. 强制刷新UI: 在一些极端情况下,UI可能需要强制刷新来正确显示更新后的内容。可以通过重新设置窗口的可见性或使用 repaint() 方法来尝试解决显示问题。

可以尝试以上建议来解决显示问题。

如果仍有问题,可能需要更详细地检查您的开发环境或Java版本是否有影响。

FishC 发表于 2024-5-27 18:22:36

您好!问题出在添加按钮的时候,代码中使用了错误的参数。在for循环中,将`names`作为参数传递给了`add()`方法,而实际上应该传入`names`来表示每个按钮的文本。

修改后的代码如下:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class CardLayoutDemo {
    Frame fr = new Frame();
    String[] names = { "第一张", "第二张", "第三张", "第四张", "第五张" };
    Panel pan = new Panel();
    public void init(){
      final CardLayout c = new CardLayout(); //卡片布局
      pan.setLayout(c);
      for (int i = 0; i < names.length; i++) {
            pan.add(names,new Button(names));
      }
      Panel p1 = new Panel();

      Button previous = new Button("上一张");
      previous.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                c.previous(pan);
            }
      });

      Button next = new Button("下一张");
      next.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                c.next(pan);
            }
      });

      Button first = new Button("第一张");
      first.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                c.first(pan);
            }
      });

      Button last = new Button("最后一张");
      last.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                c.last(pan);
            }
      });

      Button third =new Button("第三张");
      third.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                c.show(pan,"第三张");
            }
      });

      p1.add(previous);
      p1.add(next);
      p1.add(first);
      p1.add(last);
      p1.add(third);
      fr.add(pan);
      fr.add(p1, BorderLayout.SOUTH);

      fr.pack();
      fr.setVisible(true);
    }

    public static void main(String[] args) {
      new CardLayoutDemo().init();
    }
}

现在运行程序,应该能正确显示按钮的文本了。希望能帮到您!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

sususususu 发表于 2024-6-2 12:58:29

我明白了,只用将Button改为JButton即可正确显示
页: [1]
查看完整版本: CardLayouDemo输出问题