【问题标题】:the component does not appear in the west border layout组件未出现在西边框布局中
【发布时间】:2016-07-30 06:21:31
【问题描述】:

我有这个代码

package com.company;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Alarm extends JFrame {
JFrame frame = new JFrame("Java Alarm Clock");
JMenuBar menuBar = new JMenuBar();

JMenu clock = new JMenu("Clock");
JMenu alarm = new JMenu("Alarm");
JMenu help = new JMenu("Help");

public Alarm() {
    super("Java Alarm Clock");
    getContentPane().setBackground(new Color(204,204,255));
    setLayout(new BorderLayout());
    setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
    setSize(770,470);
    setVisible(true);

    add(new pclock() , BorderLayout.WEST);

    add(menuBar , BorderLayout.NORTH);
    menuBar.setBackground(new Color(204,204,255));
    menuBar.add(clock);
    menuBar.add(alarm);
    menuBar.add(help);
}

class pclock extends JPanel {
    public void paintComponent(Graphics g) {
        setBackground(new Color(204,204,255));
        super.paintComponent(g);
        g.setColor(Color.WHITE);
        g.fillOval(40, 100, 180, 180);
    }
}

public static void main(String[] args) {
    new Alarm();
    }
}

我希望输出是这样的图片

但是当我运行代码时,圆圈没有出现 只有当我更改此代码时才会出现

add(new pclock() , BorderLayout.WEST);

add(new pclock());

那么如何让它像那张图片一样出现在左侧? 谢谢

【问题讨论】:

  • 你能告诉我们它目前的样子,即你看到的问题吗?
  • public void paintComponent(Graphics g) { setBackground(new Color(204,204,255)); super.paintComponent(g);setBackground(new Color(204,204,255)); 的调用应该在构造函数中。它只需要完成一次,我们不应该在paint方法中更改组件的状态,因为这会触发repaint()
  • setVisible(true); 应该是Alarm 构造函数中的最后一个方法调用。

标签: java swing components layout-manager border-layout


【解决方案1】:
  1. 类名应该以大写字符开头。您的自定义类命名不正确。

  2. BorderLayout 的 WEST 区域将尊重添加到其中的任何组件的宽度。您的自定义组件的大小为 (0, 0),因此没有可显示的内容。您需要覆盖自定义类的getPreferredSize() 方法以返回时钟的大小。

阅读 Custom Painting 上的 Swing 教程部分,了解更多信息和工作示例。

【讨论】:

    猜你喜欢
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多