2014-01-16 37 views
2

每當我運行程序時,我的JTextArea不會遵循我給出的維度,但是如果我調整我的JFrame大小,它會更新並將其大小設置爲我放置的大小。JTextArea不會更新,除非我調整JFrame的大小

問題是什麼?

public ControlPanel() { 
    // create our list of players 
    list = new JList(model); 

    // create our scroll panes 
    userspane = new JScrollPane(list); 
    consolepane = new JScrollPane(console); 

    // set sizes 
    userspane.setSize(100, 500); 
    jta.setSize(100, 500); 
    list.setSize(100, 500); 
    consolepane.setSize(100, 500); 
    console.setSize(100, 500); 

    // add to panel 
    panel.add(userspane, BorderLayout.CENTER); 
    panel.add(kick); 
    panel.add(ban); 
    panel.add(info); 
    panel.add(consolepane, BorderLayout.CENTER); 

    // set frame properties 
    setTitle("RuneShadows CP"); 
    setSize(280, 400); 
    //setResizable(false); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setContentPane(panel); 
    setVisible(true); 
} 
+0

_「這是什麼問題?」 - - 您將尺寸設置爲一切。只需'.pack()',讓它爲你做所有的尺寸。 –

+0

我用pack()但第二個JTextBox仍然不是合適的尺寸.. – user3130731

回答

3

不要設置大小以什麼

  • 對於JTextArea您可以使用構造JTextArea(int rows, int charSpaces)
  • 只是pack()JFrame,它會尊重內部組件的所有首選大小。
  • 而不是將內容窗格設置到面板,只需添加面板。這將尊重面板的尺寸較受歡迎的鏈接時pack()

我不完全知道什麼變量是什麼(或者你想要的大小),所以我假定文本區域,以及其他的方面。看到這個例子,我剛剛使用我提到的JTextArea構造函數,並且只使用pack ed。

EDITED沒有大小設置

import java.awt.BorderLayout; 
import javax.swing.DefaultListModel; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import static javax.swing.JFrame.EXIT_ON_CLOSE; 
import javax.swing.JList; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 
import javax.swing.SwingUtilities; 

public class ControlPanel extends JFrame { 

    JScrollPane userspane; 
    JList list; 
    DefaultListModel model = new DefaultListModel(); 
    JScrollPane consolepane; 
    JTextArea console = new JTextArea(20, 50); 
    JTextArea jta = new JTextArea(6, 50); 
    JPanel panel = new JPanel(); 

    JButton kick = new JButton("Kick"); 
    JButton ban = new JButton("Ban"); 
    JButton info = new JButton("Info"); 

    public ControlPanel() { 
     // create our list of players 
     list = new JList(model); 

     // create our scroll panes 
     userspane = new JScrollPane(list); 
     consolepane = new JScrollPane(console); 

     // add to panel 
     panel.add(userspane, BorderLayout.CENTER); 
     panel.add(kick); 
     panel.add(ban); 
     panel.add(info); 
     panel.add(consolepane, BorderLayout.CENTER); 

     add(panel); 
     pack(); 
     setTitle("RuneShadows CP"); 
     //setResizable(false); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable(){ 
      public void run(){ 
       new ControlPanel(); 
      } 
     }); 
    } 
} 

UPDATE - 與定位

還要記住,與BorderLayout你需要指定每一個元件的位置,你添加或否則它將默認爲CENTER,每個職位只有一個組件噸。我注意到您試圖將兩個組件添加到CENTER

import java.awt.BorderLayout; 
import javax.swing.DefaultListModel; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import static javax.swing.JFrame.EXIT_ON_CLOSE; 
import javax.swing.JList; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 
import javax.swing.SwingUtilities; 

public class ControlPanel extends JFrame { 

    JScrollPane userspane; 
    JList list; 
    DefaultListModel model = new DefaultListModel(); 
    JScrollPane consolepane; 
    JTextArea console = new JTextArea(20, 50); 
    JTextArea jta = new JTextArea(6, 50); 
    JPanel panel = new JPanel(new BorderLayout()); 

    JButton kick = new JButton("Kick"); 
    JButton ban = new JButton("Ban"); 
    JButton info = new JButton("Info"); 

    public ControlPanel() { 
     // create our list of players 
     list = new JList(model); 

     // create our scroll panes 
     userspane = new JScrollPane(list); 
     consolepane = new JScrollPane(console); 

     // add to panel 
     panel.add(userspane, BorderLayout.SOUTH); 
     JPanel buttonPanel = new JPanel(); 
     buttonPanel.add(kick); 
     buttonPanel.add(ban); 
     buttonPanel.add(info); 
     panel.add(buttonPanel, BorderLayout.CENTER); 
     panel.add(consolepane, BorderLayout.NORTH); 

     add(panel); 
     pack(); 
     setTitle("RuneShadows CP"); 
     //setResizable(false); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable(){ 
      public void run(){ 
       new ControlPanel(); 
      } 
     }); 
    } 
} 
+0

謝謝! :)得到它正是我想要的。 – user3130731

+0

請記住,使用'BorderLayout',您需要爲每個添加的組件指定一個位置,否則它將默認爲'CENTER',每個位置只有一個組件。我注意到你試圖添加兩個組件到'CENTER' –

+0

看到我的**更新**正確使用BorderLayout定位 –

相關問題