BorderLayout Sizing

Ранее я уже писал аналогичный вопрос о размещении нескольких объектов в одном JFrame и сделал то, что люди говорили об использовании менеджеров макетов.

Таким образом, все получилось, оба объекта, определенных классом, появились в JFrame, но теперь появилась небольшая проблема; Я не знаю, является ли проблема JPanel или размер JComponent, но объекты, хотя и присутствующие в JFrame, выглядят очень маленькими. Например, посмотрите на это изображение:

Вывод из Infout.java: http://prntscr.com/3mgdgu Это то же самое, что маленький объект на следующем изображении, отмеченный красной стрелкой:

Вывод из Infout.java + obj2.java в одном кадре с помощью менеджеров по расположению: http://prntscr.com/3mgezb

Примечание. Вывод из obj2.java - это маленький объект справа, а вывод из Infout.java - это маленький объект слева.

Как видите, второй объект тоже крошечный.

По сути, вывод всех моих классов в моей программе отображается на JFrame, за исключением того, что каждый из них очень маленький.

Вот код:

main.java -> класс главных методов + конструктор JFrame/JPanel + менеджер раскладки

import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class main {

public static void main(String[] args) {

    Infout m = new Infout();
    obj2 o = new obj2();
    JFrame f = new JFrame();
    JPanel start = new JPanel();
    JPanel start2 = new JPanel();

    start.add(m);
    start2.add(o);

    f.add(start,BorderLayout.CENTER);
    f.add(start2, BorderLayout.WEST);
    f.setVisible(true);
    f.setSize(300, 400);

}

}

Infout.java -> Класс, который сделал крошечный объект справа.

import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;

public class Infout extends JPanel implements ActionListener, KeyListener {

    Timer t = new Timer(5, this);
    double x = 0, y = 0, velx = 0, vely = 0;

    public Infout(){

        t.start();
        addKeyListener(this);
        setFocusable(true);
        setFocusTraversalKeysEnabled(false);
    }


    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        g2.fill(new Ellipse2D.Double(x, y, 40, 40));
        g2.fill(new Rectangle2D.Double(0, 270, 300, 5));
        g2.fill(new Rectangle2D.Double(140, 270, 5, 300));
        g2.fill(new Rectangle2D.Double(140, 60, 70, 5));
        g2.fill(new Rectangle2D.Double(50, 140, 5, 70));
        g2.fill(new Rectangle2D.Double(150, 130, 5, 40));
        g2.fill(new Rectangle2D.Double(190, 210, 40, 5));
        if (x >= 120 && y >= 270) {
            System.out.println("sum1 has reached tha corner");
            g.drawString("You win!",115,35);
        }
        if (x <= 120 && y >= 270) {
            System.out.println("sum1 has reached tha corner");
            g.drawString("You lose!",115,35);
        }
        if (x == 120 && y >= 270){
            velx = 0;
            vely = 0;
        }
        if (x == 31.5 && y <= 200 && y >= 100){
            velx = 0;
        }
        if (x == 132 && y <= 170 && y >= 100){
            velx = 0;
        }
        if (x <= 190 && x >= 120 && y == 42){
            velx = 0;
        }
        if (x <= 210 && x >= 171 && y == 192){
            velx = 0;
        }

    }


    public void actionPerformed(ActionEvent e) {

        System.out.println("x "+x+"y "+y);

        repaint();
        x += velx;
        y += vely;

        if (x < 0 || x > 260)
        {
            velx = 0;
            vely = 0;
        }
        if (y < 0 || y > 340)
        {
            velx = 0;
            vely = 0;
        }
    }

    private void up() {
        vely = -1.5;
        velx = 0;
    }

    private void down() {
        vely = 1.5;
        velx = 0;
    }

    private void left() {
        velx = -1.5;
        vely = 0;
    }

    private void right() {
        velx = 1.5;
        vely = 0;
    }

    public void keyPressed(KeyEvent e) {
        int code = e.getKeyCode();
        if (code == KeyEvent.VK_UP) {
            up();
        }
        if (code == KeyEvent.VK_DOWN) {
            down();
        }
        if (code == KeyEvent.VK_RIGHT) {
            right();
        }
        if (code == KeyEvent.VK_LEFT) {
            left();
        }

    }

    public void keyTyped(KeyEvent e) {}
    public void keyReleased(KeyEvent e) {}
}

obj2.java -> Класс, который сделал крошечный объект слева.

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Ellipse2D.Double;
import javax.swing.JPanel;
import javax.swing.Timer;

public class obj2 extends JPanel implements ActionListener
{
  Timer t = new Timer(5, this);
  double x = 0.0D;
  double y = 0.0D;
  double velX = 2.0D;
  double velY = 2.0D;

  public void paintComponent(Graphics g)
  {
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D)g;
    Ellipse2D circle = new Ellipse2D.Double(this.x, this.y, getWidth(), getHeight());
    g2.fill(circle);
    this.t.start();
  }

  public int getWidth(){
          return 25;
  }
  public int getHeight(){
      return 25;
  }

 public void actionPerformed(ActionEvent e)
  {
     this.x += this.velX;
    this.y += this.velY;
    repaint();
  }
}

По сути, мне нужно знать, как отобразить оба этих класса в полном размере на JFrame, а не на этих маленьких фрагментах, показывающих только их часть.

Спасибо!

Ab

0 ответов

Другие вопросы по тегам