Почему мое Java-приложение не работает? - PullRequest
2 голосов
/ 01 февраля 2011

Когда я пытаюсь максимизировать окно, рендеринг оригинального окна остается, в то время как другое развернутое окно появляется, делая его грязным.


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];

    }





}

Ответы [ 2 ]

5 голосов
/ 01 февраля 2011

Вы звоните createAndBuildGui() дважды: один раз в main и один раз в конструкторе.

public Blotter(){
    topFrame =  new JFrame("Subscription Fields");
    mainContentPanel = new JPanel(new BorderLayout());
    // ...
    createAndBuildGui();    <--------
}

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

Если вы удалите один из них, он работает просто отлично.

0 голосов
/ 01 февраля 2011

Это зависит от того, какой менеджер компоновки вы используете. Например, BorderLayout знает, как повторно визуализировать элементы при изменении размера кадра. К сожалению, вы не упомянули, какое окно работает для вас, а какое нет, но я видел GridBagLayout в вашем коде. Вероятно, этот макет (лучше сказать, использование этого макета) предотвращает подобное поведение.

...