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