2013-01-06 3 views
3

이것은 miglayout을 사용하는 스윙의 간단한 메모장 코드입니다. 스팬을 사용하여 가로 공간을 채우지 만 채우기 및 증가는 행 제약으로 작동하지 않습니다. 왜요? textarea가 최소 및 최대 크기의 사용 가능한 공간을 모두 채우길 원하지만 그럴 수는 없습니다. 다음은 코드입니다.JTextarea가 miglayout을 사용하여 세로로 자르지 않음

import javax.swing.*; 
import net.miginfocom.swing.MigLayout; 
import java.awt.*; 
import java.awt.event.*; 
public class Notepad{ 
JFrame jf; 
JMenuBar jmbar; 
JMenu jm1,jm2; 
JMenuItem jmnew,jmopen,jmsave,jmexit; 
JMenuItem jmselect,jmpaste,jmcopy,jmcut; 
Notepad(){ 
    jf=new JFrame("Notepad"); 
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    jf.setLayout(new MigLayout("debug,fill","","[push,grow]")); 

    /*Toolkit tk = Toolkit.getDefaultToolkit(); 
    int xSize = ((int) tk.getScreenSize().getWidth()); 
    int ySize = ((int) tk.getScreenSize().getHeight()); 
    jf.setSize(xSize,ySize); */ 
    jf.setExtendedState(Frame.MAXIMIZED_BOTH); 

    createTextArea(); 
    createMenu(); 
    //JTextArea txt=new JTextArea("", 0,0,); 
    jf.setMinimumSize(new Dimension(600,400)); 
    jf.setVisible(true); 
} 
void createMenu(){ 
    jmbar=new JMenuBar(); 
    jm1=new JMenu("File"); 
    jmnew=new JMenuItem("New"); 
    jmopen=new JMenuItem("Open"); 
    jmsave=new JMenuItem("Save"); 
    jmexit=new JMenuItem("Exit"); 
    jmexit.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent ae){ 
      System.exit(0); 
     } 
    }); 
    jm1.add(jmnew); 
    jm1.add(jmopen); 
    jm1.add(jmsave); 
    jm1.addSeparator(); 
    jm1.add(jmexit); 
    jmbar.add(jm1); 


    jm2=new JMenu("Edit"); 
    jmcut=new JMenuItem("Cut"); 
    jmcopy=new JMenuItem("Copy"); 
    jmpaste=new JMenuItem("Paste"); 
    jmselect=new JMenuItem("Select All"); 

    jm2.add(jmcut); 
    jm2.add(jmcopy); 
    jm2.add(jmpaste); 
    jm2.add(jmselect); 
    jmbar.add(jm2); 
    jf.setJMenuBar(jmbar); 

} 
void createTextArea(){ 
    JTextArea textArea = new JTextArea("", 10,40); 
    JScrollPane textScroll = new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
      JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 

    textArea.setFont(new Font("Century Gothic", Font.BOLD, 12)); 
    jf.add(textScroll,"grow,span,wrap"); 
} 
public static void main(String s[]){ 
    SwingUtilities.invokeLater(new Runnable(){ 
     public void run(){ 
      new Notepad(); 
     } 
    }); 
} 
} 

답변

1

그래야 할 것처럼 보입니다. 어떤 경쟁 요소도 보이지 않습니다. 당신이 (즉, jf.add(textScroll,"w 100%-10, h 100%-10,span,wrap")이, 내가 생각하지 않습니다하지만 트리밍이 필요합니다 프레임 장식 클리핑에서 그것을 유지하기 위해 몇 픽셀을 손질해야 할 수도 있지만 관계없이

, jf.add(textScroll,"w 100%, h 100%,span,wrap");는 작동합니다.

+0

고맙네 관련 될 수있다. – crazy4

2

나에게 버그처럼 보입니다. 구성 요소 제약 조건에서 레이아웃 제약 조건으로 랩을 이동하면 예상대로 동작하는 것처럼 보입니다.

jf = new JFrame("Notepad"); 
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
jf.setLayout(new MigLayout("debug, fill, wrap 1", "", "")); 
// add a label to better see the cell vs. component size 
// fills as expected without component wrap 
jf.add(new JLabel("nothing"), "grow"); 
// bug: doesn't fill vertically with component wrap 
//jf.add(new JLabel("nothing"), "grow, wrap"); 
jf.setSize(800, 600); 
jf.setVisible(true); 

이 (또는하지, 발굴하지 않았다) 수는 필요하지 않습니다 트리밍, issue reported last summer