2016-08-02 94 views
2

我目前正在學習Java Swing,並遇到了我認爲是一個有趣的話題,我無法找到在線答案。所以我的問題是我有一個使用Miglayout的JFrame,但它不按我希望的方式工作。我會張貼一張現在看起來像什麼和我想要它的樣子,我也會發布我的代碼。此外,我試圖把一個JPanel放在JPanel上,然後使用Miglayout移動它們,但那不起作用。 Miglayout會如何處理這個問題,還是會讓另一個佈局管理員變得更好?Miglayout或替代佈局管理器

編輯 我希望它看起來就像是有一個JTextArea和它旁邊有3個JRadioButton組合在一起,但因此它在JTextArea中

的底端向上堆棧底部的單選按鈕重新格式化本身
public SecondFrame() { 
    formPanel.setLayout(new net.miginfocom.swing.MigLayout()); 

    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.setSize(500, 525); 
    f.setVisible(true); 
    f.setLocationRelativeTo(null); 

    //by adding the buttons to a group it will only allow you to select 1 button at a time 
    buttonGroupLocation.add(sydney); 
    buttonGroupLocation.add(melbourne); 
    buttonGroupLocation.add(brisbane); 

    buttonGroupSeverityLevels.add(lowSeverityBtn); 
    buttonGroupSeverityLevels.add(mediumSeverityBtn); 
    buttonGroupSeverityLevels.add(highSeverityBtn); 
    buttonGroupSeverityLevels.add(criticalSeverityBtn); 

    formPanel.add(sydney, "cell 0 0 1 1"); 
    formPanel.add(melbourne, "cell 0 1 1 1, wrap"); 
    formPanel.add(brisbane, "cell 0 2 1 1, wrap"); 

    formPanel.add(issue, "cell 1 0 1 1, wrap"); 
    formPanel.add(issueArea, "span "); 

    formPanel.add(solution, "cell 0 8 1 1, wrap"); 
    formPanel.add(solutionArea, "cell 0 15 8 1"); 

    formPanel.add(severity, "cell 0 4 1 1, wrap"); 
    formPanel.add(lowSeverityBtn, "cell 0 5 1 1"); 
    formPanel.add(mediumSeverityBtn, "cell 1 5 1 1"); 
    formPanel.add(highSeverityBtn, "cell 2 5 1 1"); 
    formPanel.add(criticalSeverityBtn, "cell 3 5 1 1"); 

    formPanel.add(submit, "cell 0 16 1 1"); 
    formPanel.setBorder(BorderFactory.createEmptyBorder(2,2,2,2)); 

    f.add(formPanel); 

    formPanel.add(submit, "cell 0 16 1 1"); 

enter image description here

enter image description here

+2

你可以張貼[MCVE]? – c0der

回答

0

如果MigLayout不能做到這一點,其他佈局管理器將很難做到這一點。 對於MigLayout,這是一塊蛋糕。有幾種方法可以完成你的任務。我已經通過將三個無線電 按鈕放到一個單元中來完成它。這可以通過將細胞分成三個子細胞來完成。

package com.zetcode; 

import javax.swing.BorderFactory; 
import javax.swing.ButtonGroup; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JRadioButton; 
import javax.swing.JTextArea; 
import javax.swing.SwingUtilities; 
import net.miginfocom.swing.MigLayout; 

public class MigLayoutAirportEx extends JFrame { 

    public MigLayoutAirportEx() { 

     initUI(); 
    } 

    private void initUI() { 

     setLayout(new MigLayout()); 

     ButtonGroup bg = new ButtonGroup(); 

     JRadioButton sydn = new JRadioButton("Sydney"); 
     JRadioButton melb = new JRadioButton("Melbourne"); 
     JRadioButton bris = new JRadioButton("Brisbane"); 

     bg.add(sydn); 
     bg.add(melb); 
     bg.add(bris); 

     JLabel issue = new JLabel("Issue"); 
     JTextArea area = new JTextArea(15, 20); 
     area.setBorder(BorderFactory.createEtchedBorder()); 

     add(sydn, "split 3, flowy, aligny top");   
     add(melb); 
     add(bris); 
     add(issue, "split 2, flowy"); 
     add(area, "push, grow, wrap"); 

     pack(); 

     setTitle("ARE - Airport Retail Enteprises"); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    }  


    public static void main(String[] args) { 

     SwingUtilities.invokeLater(() -> { 
      MigLayoutAirportEx ex = new MigLayoutAirportEx(); 
      ex.setVisible(true); 
     }); 
    } 
} 

該示例在您遇到問題的位置創建UI的上半部分。

另外,我試圖把一個JPanel放在JPanel上,然後用Miglayout將它們移動到 ,但那不起作用。

這些都是糟糕的佈局經理遺留下來的壞習慣。與MigLayout,你不需要任何額外的面板與其他佈局管理器。功能強大的佈局管理員不需要這個。

這裏是截圖:

enter image description here