Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GUI组件(新手)_Java_User Interface - Fatal编程技术网

Java GUI组件(新手)

Java GUI组件(新手),java,user-interface,Java,User Interface,谢谢你的帮助。现在所有的对象都显示出来了 但我遇到了一个新问题。我试着用一个For循环来画10个相同盒子的副本,中间有一点空间,这样它们就不会堆叠在同一个位置 但由于某些原因,它们一直被画在彼此的顶部和中间,而不是从x=20开始 import java.awt.*; import javax.swing.*; public class CarWashPanel extends JPanel { public int i; public int x = 20; @Ov

谢谢你的帮助。现在所有的对象都显示出来了

但我遇到了一个新问题。我试着用一个For循环来画10个相同盒子的副本,中间有一点空间,这样它们就不会堆叠在同一个位置

但由于某些原因,它们一直被画在彼此的顶部和中间,而不是从x=20开始

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

public class CarWashPanel extends JPanel {

    public int i;
    public int x = 20;

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.black);
        for (i=0; i < 10; i++){
        g.fillRoundRect(x, 10, 50, 100, 55, 25);
        x = x + 10;
        }
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(500, 150);
    }

}

如果不需要动态添加内容,最好在添加所有组件后调用
setVisible(true)

但是,如果要在框架可见后添加内容,可以这样做,然后调用框架的
revalidate()
方法使其重新绘制


其次,我建议您在添加任何组件之前设置布局。在添加组件之前,您正在调用
setVisible
。在
CarWashPanel
上添加组件,在
JFrame
上添加
CarWashPanel
,然后调用
setVisible
。另外,删除这一行:
setLayout(newflowlayout())
-FlowLayout是
JPanel
(在您的情况下是CarWashPanel)的默认布局,这就足够了

您的代码应该如下所示:

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

public class Main {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(GUI::new);

    }

    public static class GUI extends JFrame {
        private JTextField t1 = new JTextField(2);
        private JLabel l1 = new JLabel("enter position");
        private JButton b1 = new JButton("new customer");
        private JButton b2 = new JButton("wash car");

        CarWashPanel carWashPanel = new CarWashPanel();

        public GUI() {
            setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            carWashPanel.add(l1);
            carWashPanel.add(t1);
            carWashPanel.add(b1);
            carWashPanel.add(b2);
            add(carWashPanel,BorderLayout.CENTER);
            setTitle("Carwash");
            pack();
            setVisible(true);

        }

    }


    public class Carwash {

        private boolean[] positions = new boolean[10];
        private int washing = 10;

        public void addCar(int p) {
            positions[p] = true;
        }

        public void removeCar(int p) {
            positions[p] = false;
        }

        public boolean[] getPositions() {
            return positions;
        }

        public int getWashing() {
            return washing;
        }

    }

    public static class CarWashPanel extends JPanel {


        public CarWashPanel() {

        }

        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.setColor(Color.black);
            g.fillRoundRect(150, 50, 100, 100, 50, 25);
        }


        @Override
        public Dimension getPreferredSize() {
            return new Dimension(500, 200);
        }
    }
}
其他旁注:

不要为
JFrame
调用
setSize
,调用
pack
。而是覆盖
JPanel
getPreferredSize
,并返回一些维度

避免使用
JFrame
扩展类,除非您想定义新方法或覆盖现有方法

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

public class Main {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(GUI::new);

    }

    public static class GUI extends JFrame {
        private JTextField t1 = new JTextField(2);
        private JLabel l1 = new JLabel("enter position");
        private JButton b1 = new JButton("new customer");
        private JButton b2 = new JButton("wash car");

        CarWashPanel carWashPanel = new CarWashPanel();

        public GUI() {
            setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            carWashPanel.add(l1);
            carWashPanel.add(t1);
            carWashPanel.add(b1);
            carWashPanel.add(b2);
            add(carWashPanel,BorderLayout.CENTER);
            setTitle("Carwash");
            pack();
            setVisible(true);

        }

    }


    public class Carwash {

        private boolean[] positions = new boolean[10];
        private int washing = 10;

        public void addCar(int p) {
            positions[p] = true;
        }

        public void removeCar(int p) {
            positions[p] = false;
        }

        public boolean[] getPositions() {
            return positions;
        }

        public int getWashing() {
            return washing;
        }

    }

    public static class CarWashPanel extends JPanel {


        public CarWashPanel() {

        }

        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.setColor(Color.black);
            g.fillRoundRect(150, 50, 100, 100, 50, 25);
        }


        @Override
        public Dimension getPreferredSize() {
            return new Dimension(500, 200);
        }
    }
}