فى المشاركة الموجودة فى هذا اللينك /index.php?showtopic=215891
كنت أتحاور مع الشباب فى مشكلة بسيطة متعلقة ببناء ال GUI و هو عبارة عن panel عليها صورة + panel عليها buttons ( المشكلة كانت تكمن فى أن أحدهما تمتد و تأخذ مساحة كبيرة جداً و الأخرى غير قابلة للتغير فى حجمها و غير قابلة للحركة )
لكن مع ال Layout المُسمى ب GridBagLayout و ال GridBagConstraints class تم حل المشكلة .
أترككم مع الشفيرة البسيطة
-------------------------------
import java.awt.*;
import javax.swing.*;
import javax.imageio.ImageIO;
import java.net.URL;
public class ServicesMainFrame extends JFrame {
private JPanel mainPanel, panel, buttonsPanel;
private ImagePanel imagePanel;
private JButton[] buttons;
private String[] buttonNames = {"J2SE", "J2ME", "J2EE", "JFX", "MAVEN", "GLASSFISH", "C++", "PHP", "HELP", "ABOUT", "EXIT"};
public ServicesMainFrame(Image image) {
createPanel(image);
createButtons();
getContentPane().add(mainPanel);
}
private void createPanel(Image image) {
mainPanel = new JPanel(new BorderLayout());
panel = new JPanel(new GridLayout(1, 2));
/////////////////////////////////////////////////////////////////////
buttonsPanel = new JPanel(new GridLayout(15, 1, 3, 3));
// buttonsPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 3));
// buttonsPanel.setBackground(Color.red);
JPanel centerPanel1 = new JPanel(new GridBagLayout());
buttonsPanel.setPreferredSize(new Dimension(200, 600));
GridBagConstraints c = new GridBagConstraints();
centerPanel1.add(buttonsPanel, c);
panel.add(centerPanel1);
/////////////////////////////////////////////////////////
imagePanel = new ImagePanel(image);
//////////////////////////////////////////////////////////
JPanel centerPanel = new JPanel(new GridBagLayout());
GridBagConstraints c1 = new GridBagConstraints();
c1.insets = new Insets(10, 10, 10, 10);
centerPanel.add(imagePanel, c1);
panel.add(centerPanel);
mainPanel.add(panel, BorderLayout.EAST);
}
public static void main(String[] args) throws Exception {
URL imageURL = new URL("http://www.soundwordsministries.com/wp-content/uploads/2008/05/mothers-day-flowers.jpg");
Image image = ImageIO.read(imageURL);
ServicesMainFrame servicesMainFrame = new ServicesMainFrame(image);
servicesMainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
servicesMainFrame.setSize(new Dimension(600, 300));
servicesMainFrame.setLocationRelativeTo(null);
servicesMainFrame.setVisible(true);
servicesMainFrame.pack();
servicesMainFrame.setExtendedState(MAXIMIZED_BOTH);
}
private void createButtons() {
buttons = new JButton[buttonNames.length];
for (int i = 0; i < buttonNames.length; ++i) {
buttons = new JButton(buttonNames);
buttonsPanel.add(buttons);
}
}
}
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
public class ImagePanel extends JPanel {
private Image image;
public ImagePanel(Image image) {
this.image = image;
setBorder(BorderFactory.createLineBorder(Color.BLACK, 3));
setPreferredSize(new Dimension(image.getWidth(this), image.getHeight(this)));
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, this);
}
}عشان أستاذنا علاء بيحب الملفات المرفقة :lol: ( ستجدون الملف مرفق ) .
صحيح مشكلة بسيطة و أخذت وقت معى - و تعبت الإخوة جدا و أرجو أن يسامحونى ً - لكن خرجنا بفائدة
-------------------
نقول مع الشاعر :
كان حُلماً فخاطراً فاحتمالاً .. أضحى الآن حقيقة لا خيالاً
:lol:
شكراً