2017-10-25 3 views
0

私はゲームランチャーを作成しようとしています。このために、さまざまなレイアウトスタイルのJPanelsをいくつか用意しています。レイアウトスタイルがたくさんあり、彼らはすべて自分の長所と短所を持っているからです。 これは私が現時点で持っているものです。 enter image description here複数のレイアウトスタイルでレイアウトを作成するにはどうすればいいですか

これは私がそれをやった方法です: これは、パネルのカップルが追加されているメインフレーム、です。

public Frame() { 
    main = new Background(); 
    menuPane = new MenuPane(); 

    main.setLayout(new BorderLayout()); 

    add(main); 

    main.add(menuPane, BorderLayout.NORTH); 

    setTitle("DelusionX Launcher"); 
    setSize(700, 500); 
    setUndecorated(true); 
    setVisible(true); 
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
    setLocationRelativeTo(null); 
} 

これはこれは、メニューパネル

public MenuPane() { 
    this.setBackground(new Color(0, 0, 0, 0.5f)); 
    this.setLayout(new BorderLayout()); 
    minimizeBtn = new Button(); 
    minimizeBtn.addActionListener(this); 
    minimizeBtn.setIcon(minimizeImg); 
    this.add(minimizeBtn, BorderLayout.EAST); 
    closeBtn = new Button(); 
    closeBtn.addActionListener(this); 
    closeBtn.setIcon(closeImg); 
    this.add(closeBtn, BorderLayout.EAST); 
} 

で、あなたも私を見ることができるように、これはボタンオブジェクト

public Button() { 
    setBorderPainted(false); 
    setBorder(null); 
    setMargin(new Insets(0, 0, 0, 0)); 
    setContentAreaFilled(false); 
} 

ある背景パネル

public Background() { 
    try { 
     backgroundImg = ImageIO.read(new File("./Images/Background.jpg")); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

@Override 
public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    g.drawImage(backgroundImg, (getWidth() - backgroundImg.getWidth(null))/2, 0, null); 
} 

です最小化ボタンを追加しましたが、f何らかの理由でクローズボタンの後ろにいると思われます。 これは私が達成したいものです: enter image description here これは私がパネルをすべきだと思った方法ですが、それが最も良い/最も簡単な方法かどうかはわかりません。

enter image description here 短い質問:2番目の画像のように見えるJFrameをどうすれば作成できますか?

+0

1)すぐに役立つようにするには、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 2)最小のサイズでGUIの*意図された*レイアウトのアスキーアートまたは簡単な図面を提供し、余分なスペースをどのように使用すべきかを示すために、より幅と高さの変更が可能な場合。 –

+0

さて、次回はそれをやろうとしますが、私はこれに答えるための十分な情報を提供していると思いました。 – xX4m4zingXx

+0

IDEでコードが壊れているのを見るのに十分な情報がまだありません。 –

答えて

1

GridBagLayoutは、デフォルトのAPIの中で最も柔軟なレイアウトマネージャの一つであり、それはあなたがより詳細

GridBagLayout

ため How to Use GridBagLayoutを参照してください

を試して喜んでいる場合は、いくつかの素晴らしいもので逃げることができます

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.GridLayout; 
import java.awt.Insets; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import javax.swing.border.LineBorder; 

public class Test { 

    public static void main(String[] args) { 
     new Test(); 
    } 

    public Test() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 
      setLayout(new GridBagLayout()); 

      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.gridx = 0; 
      gbc.gridy = 0; 
      gbc.insets = new Insets(100, 0, 0, 0); 
      gbc.weightx = 1; 
      gbc.weighty = 1; 
      gbc.fill = GridBagConstraints.BOTH; 
      add(new ProxyPane(400, 300, Color.RED), gbc); 

      gbc.insets = new Insets(101, 1, 0, 1); 
      gbc.weighty = 0; 
      gbc.fill = GridBagConstraints.HORIZONTAL; 
      gbc.anchor = GridBagConstraints.NORTH; 
      add(new ProxyPane(400, 50, Color.YELLOW), gbc); 

      gbc.insets = new Insets(0, 0, 0, 0); 
      gbc.weightx = 0; 
      gbc.weighty = 0; 
      gbc.fill = GridBagConstraints.NONE; 
      add(new ProxyPane(300, 200, Color.GREEN), gbc); 
     } 

    } 

    public class ProxyPane extends JPanel { 

     private Dimension size; 

     public ProxyPane(int width, int height, Color borderColor) { 
      size = new Dimension(width, height); 
      setBorder(new LineBorder(borderColor)); 
      setOpaque(false); 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return size; 
     } 

    } 

} 
関連する問題