2014-03-12 28 views
0

我正在爲layout manager使用gridbaglayout編寫快速的weatherapplication。然而,gridbag拒絕將JLabel對象放入單獨定義的單元格中,而是將其全部放入一個單元格中。GridBagLayout將所有對象放在同一個單元格中

public class WeatherApp extends JFrame { 

private JLabel jDayOfTheWeek; 
RSSReader rss = null; 
private JLabel jWindDirectionToday; 
private JLabel jWindSpeed1; 
private JLabel jMaxTemp1; 
private JLabel jMinTemp1; 
private JLabel jVisibility1; 
private JLabel jPressure1; 
private JLabel jHumidity1; 
private JLabel jWindSpeed2; 
private JLabel jMaxTemp2; 
private JLabel jMinTemp2; 
private JLabel jVisibility2; 
private JLabel jPressure2; 
private JLabel jHumidity2; 
private JLabel jWindSpeed3; 
private JLabel jMaxTemp3; 
private JLabel jMinTemp3; 
private JLabel jVisibility3; 
private JLabel jPressure3; 
private JLabel jHumidity3; 

public WeatherApp() { 


    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    this.setTitle("Detailed weather"); 
    this.setSize(320,480); 
    GridBagLayout myLayout = new GridBagLayout(); 
    JPanel mainFrame = new JPanel(myLayout); 
    rss = new RSSReader(); 
    GridBagConstraints c = new GridBagConstraints(); 



    c.gridwidth = 4; 
    c.gridheight = 10; 

    jDayOfTheWeek = new JLabel("lelel"); 
    jDayOfTheWeek.setText(this.getDayOfTheWeek()); 
    c.anchor = GridBagConstraints.FIRST_LINE_START; 
    c.gridx = 0; 
    c.gridy = 0; 

    c.weightx = 1; 
    c.weighty = 1; 


    mainFrame.add(jDayOfTheWeek, c); 



    jWindDirectionToday = new JLabel(rss.getFirstDay().getWindDirection()); 
    c.anchor = GridBagConstraints.CENTER; 
    c.gridx = 2; 
    c.gridy = 2; 
    c.weightx = 1; 
    c.weighty = 1; 
    mainFrame.add(jWindDirectionToday, c); 


    jWindSpeed1 = new JLabel(Integer.toString(rss.getFirstDay().getWindSpeed()) + "mph"); 
    c.gridx = 3; 
    c.gridy = 3; 
    c.weightx = 1; 
    c.weighty = 1; 
    mainFrame.add(jWindSpeed1, c); 


    jMaxTemp1 = new JLabel(Integer.toString(rss.getFirstDay().getMaxTemp()) + "C"); 
    c.gridx = 4; 
    c.gridy = 4; 
    c.weightx = 1; 
    c.weighty = 1; 
    mainFrame.add(jMaxTemp1, c); 



    this.add(mainFrame); 



} 

public String getDayOfTheWeek() { 
    Calendar c = Calendar.getInstance(TimeZone.getDefault()); 

    Date currentDate = c.getTime(); 
    return new SimpleDateFormat("EEEE").format(currentDate); 



} 

public static void main(String[] args) { 
    WeatherApp myapp = new WeatherApp(); 
    myapp.setVisible(true); 

} 

現在,如果你看一下代碼,中的JLabel被分配到不同的網格位置:0,0 2,2 3,3和4,4然而,結果當我編譯和執行所有網格位置忽略,但是如果我使用gridbagconstraints的常量來錨定這些常量時,請遵循這些常量。

+0

你必須爲1(GBC是基於列)把無形的(幾個空的JLabel),以1行2的JLabel在第1行將佔用所需的列數 – mKorbel

回答

2

刪除下一行和您的標籤會在正確的位置:

c.gridwidth = 4; 
c.gridheight = 10; 
+0

謝謝突然工作! – user1742032

相關問題