2011-02-01 3 views
2

창을 최대화하려고 시도하면 창 전체가 렌더링되는 동안 최대화 된 창이 표시되어 지저분 해집니다.Java Swing 응용 프로그램이 잘못 작동하는 이유는 무엇입니까?


import java.awt.BorderLayout; 
import java.awt.FlowLayout; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.GridLayout; 
import java.awt.Insets; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTabbedPane; 
import javax.swing.JTable; 
import javax.swing.table.DefaultTableModel; 
import javax.swing.*; 
import javax.swing.table.TableColumnModel; 


/** 
* @author ad * 
*/ 
public class Blotter { 

    private JFrame topFrame; 
    private JPanel mainContentPanel; 

    private JList unsubscribedFields; 
    private JList subscribedFields; 
    private JButton butSubscribe; 
    private JButton butUnsubscribe; 
    private JButton butApply; 
    private JButton butOk; 
    private JButton butCancel; 
    private JPanel panConfirm; 
    private JPanel panToggle; 
    private JPanel panBottom; 


    private JPanel panLeftList; 
    private JPanel panRightList; 
    private JPanel panSubcribe; 
    private JPanel panUnsubscribe; 


    /** 
    * @param args 
    */ 
    public Blotter(){ 
     topFrame = new JFrame("Subscription Fields"); 
     mainContentPanel = new JPanel(new BorderLayout()); 
     /* 
     butSubscribe = new JButton("-->"); 
     butUnsubscribe= new JButton("<--"); 
     butApply = new JButton("Apply"); 
     butOk = new JButton("OK"); 
     butCancel = new JButton("Cancel");*/ 
     createAndBuildGui(); 
    } 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     Blotter b = new Blotter(); 
     try { 
      UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     b.createAndBuildGui(); 
     b.fillGUI(); 
    } 


    private void fillGUI() { 
     String[] someRow = {"S110","200","100","42","32"}; 

    } 

    public void createAndBuildGui() 
    { 



     panConfirm = new JPanel(new GridLayout(1,3,5,5)); 
     panToggle = new JPanel(new GridBagLayout()); 
     panBottom = new JPanel(new FlowLayout()); 



     butApply = new JButton("Apply"); 
     butOk = new JButton("OK"); 
     butCancel = new JButton("Cancel"); 


     unsubscribedFields = new JList(); 
     subscribedFields = new JList(); 
     butSubscribe = new JButton(">>>"); 
     butUnsubscribe = new JButton("<<<"); 


     panSubcribe = new JPanel(new BorderLayout()); 
     panUnsubscribe = new JPanel(new BorderLayout()); 
     panLeftList = new JPanel(new BorderLayout()); 
     panRightList = new JPanel(new BorderLayout()); 


     // GridBagConstraints(int gridx, int gridy, int gridwidth, 
     // int gridheight, double weightx, double weighty, 
     // int anchor, int fill, Insets insets, int ipadx, int ipady) 


     panLeftList.add(unsubscribedFields, BorderLayout.CENTER); 
     panRightList.add(subscribedFields, BorderLayout.CENTER); 
     panSubcribe.add(butSubscribe, BorderLayout.SOUTH); 
     panUnsubscribe.add(butUnsubscribe, BorderLayout.NORTH); 
     panToggle.add(panLeftList, 
       new GridBagConstraints(0, 0, 1, 2, 0.5, 1, GridBagConstraints.CENTER, 
         GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); 

     panToggle.add(panRightList, 
       new GridBagConstraints(2, 0, 1, 2, 0.5, 1, GridBagConstraints.CENTER, 
         GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); 

     panToggle.add(panSubcribe, 
       new GridBagConstraints(1, 0, 1, 1, 0, 0.5, GridBagConstraints.SOUTH, 
         GridBagConstraints.NONE, new Insets(0, 2, 4, 4), 0, 0)); 
     panToggle.add(panUnsubscribe, 
       new GridBagConstraints(1, 1, 1, 1, 0, 0.5, GridBagConstraints.NORTH, 
         GridBagConstraints.NONE, new Insets(0, 2, 4, 4), 0, 0)); 



     // Building bottom OK Apply Cancel panel. 
     panConfirm.add(butApply, 0); 
     panConfirm.add(butOk, 1); 
     panConfirm.add(butCancel, 2); 

     panBottom = new JPanel(new FlowLayout(FlowLayout.RIGHT)); 
     panBottom.add(panConfirm, BorderLayout.EAST); 



     // building main content panel 
     mainContentPanel.add(panToggle,BorderLayout.CENTER); 
     mainContentPanel.add(panBottom, BorderLayout.SOUTH); 
     topFrame.add(mainContentPanel); 


     topFrame.pack(); 
     topFrame.setVisible(true); 

     topFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    } 

    protected void createPriceTable() { 
     // More fields : "Quantity Done","Quantity Open","PInst","State","Cancel State","Executing System","WaveID","Source System","TraderID","Average Price","LastExecutionPrice","ClientOrderTag","OldQuantityDone" 
     String[] columnNames = {"OrderId","Account","Symbol","Side","Quantity",}; 
     Object[][] o = new Object[0][columnNames.length]; 

    } 





} 
+0

코드를 실행합니다. 그게 "지저분한 것"입니다. 스윙은 코드가 말하는 것을 수행합니다. – PeterMmm

+0

창을 원래대로 작게 만들면 이미지를 최대화 할 수 있습니다. 또 하나의 최대화 창이 생깁니다. 마우스로 크기를 조정하면 크기가 조정 된 단일 창의 창이 필요합니다. – ada

+0

@ PeterMmm, 모든 구성 요소가 만들어지고 두 번 추가됩니다. 내 대답을 보라. – aioobe

답변

0

그것은 당신이 사용하는 레이아웃 매니저에 따라 달라집니다. 예를 들어 BorderLayout은 프레임 크기가 변경되면 요소를 다시 렌더링합니다. 불행히도 당신은 당신을 위해 어떤 윈도우가 작동하는지는 언급하지 않았지만 당신의 코드에서 GridBagLayout을 보았습니다. 아마도이 레이아웃 (이 레이아웃의 사용법을 더 잘 말하는 것)은 비슷한 동작을 방지합니다.

+0

사용중인 특정 레이아웃 관리자와 관련이 없습니다. 내 대답을 보라. – aioobe

5

createAndBuildGui()을 두 번 호출합니다. 한 번은 main이고 한 번만 생성자가 호출됩니다.

public static void main(String[] args) { 
    Blotter b = new Blotter(); 
    // ... 
    b.createAndBuildGui(); <-------- 
    b.fillGUI(); 
} 

당신이 중 하나를 제거하면

 

public Blotter(){ 
    topFrame = new JFrame("Subscription Fields"); 
    mainContentPanel = new JPanel(new BorderLayout()); 
    // ... 
    createAndBuildGui(); <-------- 
} 
, 그냥 잘 작동합니다.

+0

고마움 많은 남자 – ada

+0

당신을 진심으로 환영합니다. – aioobe

관련 문제