java - 该组件未出现在西边框布局中

标签 java swing components layout-manager border-layout

我有这个代码

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

我希望输出像这张图一样 enter image description here

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

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

add(new pclock());

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

最佳答案

  1. 类名应该以大写字符开头。您的自定义类命名不正确。

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

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

关于java - 该组件未出现在西边框布局中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36508879/

相关文章:

java - 正则表达式多行 checkstyle 模块不起作用

java - 代码中的小错误

javascript - 尝试保存 .vue 文件

javascript - AngularJS 组件 - 带有 Typescript 的 ngModelController

java - 我自己的组件中的一个面板中有两个不同的按钮

java - SWT Java : How to apply transparency to GUI components/controls (e. g 按钮、sashForm、表格等)

java - 今天的纪元时间与当前时间无关

java - 如何将Graphics2D转换为BufferedImage?

java - JDialog 中的 JTextField 在处理后保留值

java - 使用 Solr CELL 的 ExtractingRequestHandler 从包格式中索引/提取文件