如何创建包含文本框和绘制组件的JFrame?

时间:2015-11-05 22:26:13

标签: java swing jframe jpanel paintcomponent

我试图创建一个每隔几秒就会绘制100条随机行的程序。我想添加一个文本字段,允许用户调整每次刷新之间的时间量。

但是,每当我尝试向JFrame添加更多组件时,paintComponent就会完全消失。如何使用文本字段和图形创建窗口?

这是我到目前为止所拥有的

{
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.*;
    import javax.swing.Timer;
    import java.util.*;

    public class Screensaver extends JPanel implements ActionListener {

    public static void main (String[] args){ //Create Canvas
        JFrame one = new JFrame("ScreenSaver");
        one.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Screensaver f = new Screensaver();
        one.add(f);
        one.setSize(600,600);
        one.setVisible(true);
    }

    public void paintComponent (Graphics a){
        super.paintComponent(a);
        this.setBackground(Color.WHITE);
        a.setColor(Color.BLUE); //Outline
        Random rand = new Random();
        Timer time = new Timer(4000, this);
        time.start();
        for(int i =0; i<100; i++){
            int x1 =rand.nextInt(600);
            int y1 =rand.nextInt(600);
            int x2 =rand.nextInt(600);
            int y2 =rand.nextInt(600);
            a.drawLine(x1, y1, x2, y2);
        }
    }

    public void actionPerformed(ActionEvent e) {
        repaint();
    }

}

1 个答案:

答案 0 :(得分:1)

JTextField textField = new JTextField(10);
one.add(textField, BorderLayout.PAGE_START);
one.add(f, BorderLayout.CENTER);

框架的默认布局管理器是BorderLayout,因此您需要将tomponens添加到布局的其他区域。阅读How to Use BorderLayout上Swing教程中的部分以获取更多信息和示例。本教程还提供了其他布局管理器的示例,并将向您展示如何更好地设计您的类。

本教程还有一个关于Custom Painting应该阅读的部分,因为您还应该设置自定义绘图面板的首选大小。