PDA

View Full Version : سوال: ایجاد JPanel در یک JFrame



Sina.iRoid
دوشنبه 03 آذر 1393, 01:37 صبح
سلام.

دوستان من می خوام داخل یک فریم، یک JPanel قرار بدم. نحوه قرار دادن JPane و بلدم، اما نمی دونم که اندازه اونو چه طور تعیین کنم!؟ مثلا می خوام اندازه JPanel با تغییر اندازه فریم، تغییر پیدا کنه. اینطوری که من الان می نویسم، جی پنل یه اندازه ثابت داره و تغییر نمی کنه.


import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class MainFrame extends JFrame{

//Constructor
public MainFrame() {
super("Window Demo");
setLayout(new FlowLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel panel = new JPanel();

panel.setBackground(Color.BLUE);

panel.setPreferredSize(new Dimension(350, 350));

add(panel);

//end
setSize(400, 400);
setVisible(true);
}
}


ممنون میشم اگر راهنماییم کنید.

محمد فدوی
دوشنبه 03 آذر 1393, 17:42 عصر
سلام.
این چیزا مربوط به وظایف Layoutهاست. شما میتونی از BorderLayout (http://www.java2s.com/Tutorial/Java/0240__Swing/WhatistheBorderLayout.htm)استفاده کنی:


setLayout(new BorderLayout()); // setLayout(new FlowLayout());
...
add(panel, BorderLayout.CENTER); // add(panel);


علاوه بر این میتونی از یه GridLayout (http://www.java2s.com/Tutorial/Java/0240__Swing/HowtoUseGridLayout.htm) با یک سلول هم استفاده کنی.

Sina.iRoid
دوشنبه 03 آذر 1393, 18:08 عصر
سلام.
ابتدا سپاس از شما.

من این کار و انجام میدم. اما مشکل می دونید چیه!؟ وقتی که CENTER قرار میدم، JPanel کل فریم در نظر می گیره! من می خوام از بالا و پایین و چپ و راست، به یه اندازه از فریم فاصله داشته باشه.
مثلا وقتی که رنگ جی-پنل و آبی می کنم، کل صفحه آبی نشه و فقط همون داخل جی-پنل آبی بشه.

من یه کد به این صورت نوشتم، جواب میده، اما به نظرم کاره درستی نیست.


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


public class MainFrame extends JFrame{

//Constructor
public MainFrame() {
super("Window Demo");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());

JPanel panel;

panel = new JPanel();
add(panel, BorderLayout.PAGE_START);
panel.setBackground(Color.WHITE);

panel = new JPanel();
add(panel, BorderLayout.LINE_START);
panel.setBackground(Color.WHITE);

panel = new JPanel();
add(panel, BorderLayout.LINE_END);
panel.setBackground(Color.WHITE);

panel = new JPanel();
add(panel, BorderLayout.CENTER);
panel.setBackground(Color.BLACK);

panel = new JPanel();
add(panel, BorderLayout.PAGE_END);
panel.setBackground(Color.WHITE);
//end
setSize(400, 400);
setVisible(true);
}
}


ممنون میشم اگر نظرتون و در موردش بیان کنید.

محمد فدوی
دوشنبه 03 آذر 1393, 18:22 عصر
این مسئله هم چندین راه حل داره. در این مورد من اگه باشم از EmptyBorder (http://www.java2s.com/Tutorial/Java/0240__Swing/EmptyBorder.htm) استفاده میکنم.