Я хочу нарисовать прямоугольник в графическом интерфейсе пользователя - PullRequest
1 голос
/ 07 октября 2019

Я хочу нарисовать прямоугольник в центре экрана с некоторой шириной и высотой, используя качели и набор абстрактных окон в Java. код указан ниже, пожалуйста, помогите мне. Сначала я рисую сетку для некоторых надписей и текстовых полей, где пользователь может вводить ширину и высоту, и когда пользователь нажимает кнопку рисования, он должен рисовать прямоугольник с определенным значением.

Это основной класс, в котором рисуется макет.

    package ABC;

import javax.swing.*;

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

    public class Drectangle extends JFrame  implements ActionListener{

        public JTextField Height=new JTextField("100",10);

        public JTextField weidth=new JTextField("800",10);

        public int x=00;

        public int y=00;

        public JButton Draw=new JButton("Draw");

            public Drectangle() {

            super("Programme");

            setSize(900,600);

            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            JPanel pane=new JPanel(new GridLayout(3,2));

            pane.add(new JLabel("Height of Rectangle :"));

            pane.add(Height);

            pane.add(new JLabel("Weidth of Rectangle : "));

            pane.add(weidth);

            pane.add(Draw);

            Draw.addActionListener(this);

            JPanel pane2=new JPanel();

            pane2.add(pane); 

            setContentPane(pane2);


            DrawRectangles d1=new DrawRectangles(x,y);

            Container content=getContentPane();

            content.add(d1);

            setVisible(true);

        }

        public static void main (String args[]) {

            Drectangle d=new Drectangle();

            d.pack();
        }


    public void actionPerformed(ActionEvent e) {

            JButton buffer=(JButton)(e.getSource());

            if(buffer.getActionCommand().equals("Draw")) {

                x=Integer.parseInt(Height.getText());

                y=Integer.parseInt(weidth.getText());
            }

        }

    }

Это подкласс, который рисует прямоугольник.

package ABC;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DrawRectangles extends JPanel {

    public int X;

    public int Y;

    public DrawRectangles(int x, int y) {

         X=x;

         Y=y;// TODO Auto-generated constructor stub
    }

    public void paintComponent(Graphics comp) {

        Graphics comp2D=(Graphics2D) comp;

        Dimension ScreenSize=Toolkit.getDefaultToolkit().getScreenSize();

        int half_Screen_Height=(ScreenSize.height)/2;

        int half_Screen_Width=(ScreenSize.width)/2;

        comp2D.drawRect(half_Screen_Height, half_Screen_Width, X , Y);

        }
}

Я хочу нарисовать прямоугольник, используя java swing и java art классы, коды которых указаны выше, пожалуйста, кто-нибудь, помогите мне, где я ошибаюсь. Спасибовы.

Ответы [ 2 ]

0 голосов
/ 07 октября 2019
  1. Избавьтесь от всех пустых строк при публикации кода.
  2. Имена переменных НЕ должны начинаться с символа верхнего регистра.
  3. ActionListener ничего не делает. Переменные x / y определены в классе «Drectangle», поэтому они не будут влиять на рисование прямоугольника в классе «DrawRectangles». Если вы хотите повлиять на размер прямоугольников, вам нужно иметь метод в вашем классе «DrawRectangles», такой как setSize (width, height). Этот метод обновит переменные экземпляра x / y и затем вызовет repaint (). Затем в коде ActionListener вы вызываете этот метод с новыми параметрами.
  4. Ваш класс "DrawRectangles" должен переопределить метод getPreferreSize(), чтобы дать предпочтительный размер компонента.
  5. Код вметод paintComponent () НЕ должен использовать метод ToolKit.getScreenSize (). Ваша панель НЕ покрывает весь экран. Это только часть кадра. Вместо этого вы используете методы getWidth() и getHeight() для получения текущего размера панели.
  6. Логика центрирования прямоугольника на панели неверна. Чтобы центрировать прямоугольник, вам нужно знать a) ширину панели и b) ширину прямоугольника. Тогда формула будет такой: xLocation = (panelWidth - rectangleWidth) / 2. Та же базовая логика для высоты.

Прочитайте раздел из учебника Swnig на Custom Painting для базовойпример пользовательской живописи, чтобы начать. Начните с рабочего примера и настройте код под свои требования. Код учебника покажет вам, как лучше структурировать ваш код, чтобы он следовал соглашениям Swing.

0 голосов
/ 07 октября 2019

Проблема в том, что DrawRectangles имеет 0,0 ширины по умолчанию, высоту. Вызовите setPreferredSize на DrawRectangles, которые вы создаете. Вы также можете вызвать fillRectangle в своем методе DrawRectangles paintComponent, чтобы убедиться, что прямоугольник действительно рисуется и что размеры drawRectangle находятся в пределах размера компонента DrawRectangle

...