2014-03-31 263 views
0

我剛寫了一個應用程序,我無法將按鈕的位置和大小設置爲所需的值。每當我打開代碼按鈕來在相同的位置和大小相同的 這裏是我的代碼無法在java中設置按鈕的大小和位置

public class main_class { 
    public static void main(String args[]){ 
     Main_page mp = new Main_page(); 
     mp.start(); 
    } 
} 

第二個文件是:

import javax.swing.*; 
import java.awt.*; 

public class Main_page extends JPanel { 
    private static final long serialVersionUID = 1L; 
    public void start(){ 
     JPanel panel1 = new JPanel(); 
     panel1.setBackground(Color.pink); 

     JButton Button1 = new JButton("Programmer"); 
     Button1.setSize(10, 100); 
     Button1.setLocation(200,500); 
     panel1.add(Button1); 

     JFrame frame1 = new JFrame("Main Window"); 
     frame1.setSize(700,500); 
     frame1.setContentPane(panel1); 
     frame1.setResizable(false); 
     frame1.setVisible(true); 
    } 
} 

是什麼問題。

+9

不要嘗試設置位置和尺寸。使用佈局管理器,它將根據操作系統和用戶的喜好自動調整位置和大小。 http://docs.oracle.com/javase/tutorial/uiswing/layout/index.html。請尊重Java命名約定:變量以小寫字母開頭,類不包含下劃線,但使用CamelCase。 –

+0

使用您的佈局管理器並嘗試在按鈕中使用setBounds()。 – Shriram

+3

@Shriram不好的建議1)建議使用setBounds 2),因爲帶setBounds的佈局管理器完全沒有。 –

回答

1

什麼問題?

我很高興你問這個問題。這不僅僅是獲得Swing應用程序的工作。您必須讓Swing應用程序正確運行,以便您可以在Swing應用程序沒有中斷的情況下向Swing應用程序添加更多功能。

  1. 我在main方法中添加了對SwingUtilities invokeLater的調用。此調用可確保在Event Dispatch thread(EDT)上定義和使用Swing組件。

  2. 我將您的類的名稱更改爲MainPage,以符合命名類的Java標準。

  3. 我實現了Runnable,使invokeLater方法參數更容易定義。

  4. 我刪除了JPanel的擴展。您使用Swing組件。擴展Swing組件的唯一原因是當你想重載某個組件方法時。擴展任何Java類的唯一原因是當你想重寫某個類方法時。

  5. 我改變了要運行的MainPage方法的名稱。

  6. 我爲您的JPanel設置了佈局(FlowLayout)。對於您的Swing組件,您必須始終使用layout manager

  7. 我使button1小寫。 Java字段名稱是小寫字母,因此您可以輕鬆地將它們與類名稱區分開來。

  8. 我添加了一個調用JFrame setDefaultCloseOperation到你的run方法。沒有這個調用,當你關閉窗口時,你的Swing應用程序不會停止執行。過了一段時間,您將有幾十個Swing應用程序的副本運行,但沒有簡單的方法來阻止它們。

  9. 我添加了對JFrame包的調用,讓JFrame擴展或縮小以適合組件,而不是固定大小。

下面是修改後的代碼。我將主要方法放在MainPage類中,以便更容易地粘貼代碼。

package com.ggl.testing; 

import java.awt.Color; 
import java.awt.FlowLayout; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

public class MainPage implements Runnable { 

    @Override 
    public void run() { 
     JPanel panel1 = new JPanel(); 
     panel1.setBackground(Color.pink); 
     panel1.setLayout(new FlowLayout()); 

     JButton button1 = new JButton("Programmer"); 
     panel1.add(button1); 

     JFrame frame1 = new JFrame("Main Window"); 
     frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame1.add(panel1); 
     frame1.pack(); 

     frame1.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new MainPage()); 
    } 
} 
0

如果您想手動設置尺寸和位置,那麼您可以使用panel1.setLayout(null);,因爲人們在評論中已經說過這是不推薦的。