2012-05-06 85 views
0

這比我想象的要困難得多。我想要做的就是將此JPanel「粘」到框架的左側。這是迄今爲止我所擁有的。 (如果可能的話,我不想使用GridBagLayout(我是一名java新手))。想將JPanel與Java框架的左側對齊

labels = new JPanel(); 
JLabel currentWordLA = new JLabel("Current word:"); 
JLabel triedLettersLA = new JLabel("Tried letters:"); 
JLabel triesLeftLA = new JLabel("Tries remaining:"); 
JButton restart = new JButton("Reset"); 

labels.setLayout(new BoxLayout(labels, BoxLayout.Y_AXIS)); 
labels.add(currentWordLA); 
labels.add(triedLettersLA); 
labels.add(triesLeftLA); 
scorePanel.add(labels, BorderLayout.WEST); 

編輯:對不起,這裏是完整的代碼。它是框架內面板內的一種面板。試圖讓框架與左邊對齊。謝謝!

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

public class Hangman { 

    JFrame frame; 
    private String[] wordList = { 
     "computer", "java", "activity", "alaska", "appearance", "article", 
     "automobile", "basket", "birthday", "canada", "central", "character", 
     "chicken", "chosen", "cutting", "daily", "darkness", "diagram", 
     "disappear", "driving", "effort", "establish", "exact", 
     "establishment", "fifteen", "football", "foreign", "frequently", 
     "frighten", "function", "gradually", "hurried", "identity", 
     "importance", "impossible", "invented", "italian", "journey", 
     "lincoln", "london", "massage", "minerals", "outer", "paint", 
     "particles", "personal", "physical", "progress", "quarter", 
     "recognise", "replace", "rhythm", "situation", "slightly", 
     "steady", "stepped", "strike", "successful", "sudden", 
     "terrible", "traffic", "unusual", "volume", "yesterday"}; 
    private String mysteryWord; 
    private boolean finished = false; 
    private boolean won = false; 
    private Button a[]; 

    public static void main(String[] args) { 
     Hangman gui = new Hangman(); 
     gui.go(); 
    } 

    class myDrawPanel extends JPanel { 

     public void paintComponent(Graphics g) { 
      setBackground(Color.white); 
      g.setColor(Color.gray); 
      g.fillRect(50, 200, 150, 20); 
      g.fillRect(90, 20, 10, 200); 
      g.fillRect(90, 20, 60, 10); 
      g.setColor(Color.black); 
      g.fillRect(145, 20, 5, 25); 
     } 
    } 

    public void go() { 
     frame = new JFrame("Hangman"); 
     JPanel topPanel = new JPanel(); 
     myDrawPanel noosePanel = new myDrawPanel(); 
     JPanel bottomPanel = new JPanel(); 
     JPanel scorePanel = new JPanel(); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLayout(new GridLayout(2, 0)); 
     bottomPanel.setLayout(new GridLayout(0, 2)); 
     scorePanel.setSize(20, 100); 

     noosePanel.setBorder(BorderFactory.createTitledBorder("Your progress.")); 
     topPanel.setBorder(BorderFactory.createTitledBorder("Your arsenal.")); 
     scorePanel.setBorder(BorderFactory.createTitledBorder("Your score.")); 
     frame.add(topPanel); 
     frame.add(bottomPanel); 
     bottomPanel.add(scorePanel); 
     bottomPanel.add(noosePanel); 

     //The Stats section. 
     JPanel labels = new JPanel(); 
     JLabel currentWordLA = new JLabel("Current word:"); 
     JLabel triedLettersLA = new JLabel("Tried letters:"); 
     JLabel triesLeftLA = new JLabel("Tries remaining:"); 
     JButton restart = new JButton("Reset"); 

     labels.setLayout(new BoxLayout(labels, BoxLayout.Y_AXIS)); 
     labels.add(currentWordLA); 
     labels.add(triedLettersLA); 
     labels.add(triesLeftLA); 
     scorePanel.add(labels, BorderLayout.WEST); 

     int i; 
     StringBuffer buffer; 
     a = new Button[26]; 
     topPanel.setLayout(new GridLayout(4, 0, 10, 10)); 

     // create all 26 buttons 
     for (i = 0; i < 26; i++) { 
      buffer = new StringBuffer(); 
      buffer.append((char) (i + 65)); 
      a[i] = new Button(buffer.toString()); 
      a[i].setSize(100, 100); 
      //a[i].addActionListener(this); 
      topPanel.add(a[i]); 
     } 

     frame.setSize(500, 500); 
     frame.setResizable(false); 
     frame.setVisible(true); 
    } 
} 
+1

這就是你直到現在?爲了使BorderLayout正常工作,您需要將更多組件添加到面板。 –

+0

你可以實現一個構造函數,而不是'go()'。 – 11684

回答

2

嘗試添加的東西BorderLayout.CENTER,像這樣:

scorepanel.add(new JPanel(), BorderLayout.CENTER); //I guess scorepanel is your frame 
    //your code here 
2

我喜歡你的佈局。我對你的例子做了一些修改:

  • 看起來像MyDrawPanel只是用於繪圖。如果覆蓋getPreferredSize,則可以使用pack()而不是致電setSize()很多。在paintComponent的內部,根據面板的getWidthgetHeight進行繪製,然後它看起來適合任何尺寸。

  • 我使用JLabel.LEFT作爲標籤,並且我將背景色設爲灰色,以便您可以看到佈局的位置。還有更多here

  • 如果您使用標準命名,如MyDrawPanel,其他人可以更容易地閱讀您的代碼。

代碼:

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

public class Hangman { 

    JFrame frame; 
    private String[] wordList = { 
     "computer", "java", "activity", "alaska", "appearance", "article", 
     "automobile", "basket", "birthday", "canada", "central", "character", 
     "chicken", "chosen", "cutting", "daily", "darkness", "diagram", 
     "disappear", "driving", "effort", "establish", "exact", 
     "establishment", "fifteen", "football", "foreign", "frequently", 
     "frighten", "function", "gradually", "hurried", "identity", 
     "importance", "impossible", "invented", "italian", "journey", 
     "lincoln", "london", "massage", "minerals", "outer", "paint", 
     "particles", "personal", "physical", "progress", "quarter", 
     "recognise", "replace", "rhythm", "situation", "slightly", 
     "steady", "stepped", "strike", "successful", "sudden", 
     "terrible", "traffic", "unusual", "volume", "yesterday"}; 
    private String mysteryWord; 
    private boolean finished = false; 
    private boolean won = false; 
    private Button a[]; 

    public static void main(String[] args) { 
     Hangman gui = new Hangman(); 
     gui.go(); 
    } 

    class MyDrawPanel extends JPanel { 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(256, 256); 
     } 

     @Override 
     public void paintComponent(Graphics g) { 
      setBackground(Color.white); 
      g.setColor(Color.gray); 
      g.fillRect(50, 200, 150, 20); 
      g.fillRect(90, 20, 10, 200); 
      g.fillRect(90, 20, 60, 10); 
      g.setColor(Color.black); 
      g.fillRect(145, 20, 5, 25); 
     } 
    } 

    public void go() { 
     frame = new JFrame("Hangman"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLayout(new GridLayout(2, 0)); 

     JPanel topPanel = new JPanel(); 
     topPanel.setBorder(BorderFactory.createTitledBorder("Your arsenal.")); 
     MyDrawPanel noosePanel = new MyDrawPanel(); 
     noosePanel.setBorder(BorderFactory.createTitledBorder("Your progress.")); 
     JPanel bottomPanel = new JPanel(new GridLayout(0, 2)); 
     JPanel scorePanel = new JPanel(new GridLayout()); 
     scorePanel.setBorder(BorderFactory.createTitledBorder("Your score.")); 

     frame.add(topPanel); 
     frame.add(bottomPanel); 
     bottomPanel.add(scorePanel); 
     bottomPanel.add(noosePanel); 

     //The Stats section. 
     JPanel labels = new JPanel(); 
     labels.setLayout(new BoxLayout(labels, BoxLayout.Y_AXIS)); 
     labels.setBackground(Color.lightGray); 
     JLabel currentWordLA = new JLabel("Current word:", JLabel.LEFT); 
     JLabel triedLettersLA = new JLabel("Tried letters:", JLabel.LEFT); 
     JLabel triesLeftLA = new JLabel("Tries remaining:", JLabel.LEFT); 

     labels.add(currentWordLA); 
     labels.add(triedLettersLA); 
     labels.add(triesLeftLA); 
     scorePanel.add(labels); 

     int i; 
     StringBuffer buffer; 
     a = new Button[26]; 
     topPanel.setLayout(new GridLayout(4, 0, 10, 10)); 

     // create all 26 buttons 
     for (i = 0; i < 26; i++) { 
      buffer = new StringBuffer(); 
      buffer.append((char) (i + 65)); 
      a[i] = new Button(buffer.toString()); 
      //a[i].addActionListener(this); 
      topPanel.add(a[i]); 
     } 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 
相關問題