2016-04-03 9 views
1

私はかなり基本的なGUIをGridBagLayoutで編成しました。最も複雑な部分は、WestにScrollPaneが埋め込まれた下部で、右はCardLayoutのPanelで、複数のChartPanelsを持つため、いくつかのグラフを切り替えることができます。CardLayoutにChartPanelを追加する

プログラムを起動するときに問題が発生します。

enter image description here

サイズ変更の問題は、私は任意の方向にフレームのサイズを変更した後に消えます。 CardLayoutパネルにこれを追加してもパネルが修正されないので、チャートパネルが問題であることを確認しました。私は空白のChartPanelを作成して、いくつかのアクションが取られた後に、後でそれを取り込むが、これは私がやったことです:

public class Tester { 
    public static void main(String[] args) { 
     JFrame frame = new JFrame("Chipmunk: Variant Data Collection Tool"); 
     JPanel hotspotPanel = new JPanel(new CardLayout()); 
     ChartPanel subHotspotPanel = new ChartPanel(null); 
     JPanel indelHotspotPanel = new JPanel(new BorderLayout()); 
     JTextPane resultPane = new JTextPane(); 
     JPanel main = new JPanel(new GridBagLayout()); 
     JPanel header = new JPanel(new BorderLayout()); 

     header.setBackground(Color.WHITE); 
     frame.setLayout(new BorderLayout()); 
     frame.setMinimumSize(new Dimension(875, 600)); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); 
     frame.setLocation(dim.width/2-frame.getSize().width/2, dim.height/2-frame.getSize().height/2); 
     resultPane.setOpaque(false); 
     resultPane.setEditable(false); 
     GridBagConstraints c = new GridBagConstraints(); 
     DocumentFilter filter = new UppercaseDocumentFilter(); 
     JTextField geneField = new JTextField(10); 
     ((AbstractDocument) geneField.getDocument()).setDocumentFilter(filter); 
     geneField.setMinimumSize(geneField.getPreferredSize()); 
     JTextField proEffField = new JTextField(10); 
     proEffField.setMinimumSize(proEffField.getPreferredSize()); 
     String[] mutTypes = { "missense", "nonsense", "frameshift", "nonframeshift"}; 
     JComboBox<String> mutTypeComboBox = new JComboBox<String>(mutTypes); 
     JButton saveResultsButton = new JButton("Save to TSV"); 
     JPanel glass = (JPanel) frame.getGlassPane(); 
     JButton clearButton = new JButton("Clear"); 
     JButton cosmicButton = new JButton("To COSMIC"); 
     JButton dataButton = new JButton("Show Data"); 
     dataButton.setEnabled(false); 
     JButton goButton = new JButton("GO"); 

     c.weightx = 1.0;c.gridx = 0;c.gridy = 0;c.anchor = GridBagConstraints.EAST;c.ipadx=5;c.ipady=5; 
     main.add(new JLabel("Gene: "), c); 
     c.gridx = 1;c.gridy = 0;c.anchor = GridBagConstraints.WEST; 
     main.add(geneField, c); 
     c.gridx = 0;c.gridy = 1;c.anchor = GridBagConstraints.EAST; 
     main.add(new JLabel("Protein Effect: "), c); 
     c.gridx = 1;c.gridy = 1;c.anchor = GridBagConstraints.WEST; 
     main.add(proEffField, c); 
     c.gridx =0;c.gridy = 2;c.anchor = GridBagConstraints.EAST; 
     main.add(new JLabel("Mutation Type: "), c); 
     c.gridx =1;c.gridy = 2;c.anchor = GridBagConstraints.WEST; 
     main.add(mutTypeComboBox, c); 
     c.gridx =0;c.gridy = 3;c.anchor = GridBagConstraints.WEST; 
     main.add(saveResultsButton, c); 
     c.gridx = 0;c.gridy = 3;c.anchor = GridBagConstraints.EAST; 
     main.add(goButton, c); 
     c.gridx = 1;c.gridy = 3;c.anchor = GridBagConstraints.WEST; 
     main.add(clearButton,c); 
     c.gridx = 0;c.gridy = 3;c.anchor = GridBagConstraints.CENTER; 
     main.add(dataButton,c); 
     c.gridx = 1;c.gridy = 3;c.anchor = GridBagConstraints.EAST; 
     main.add(cosmicButton,c); 
     c.gridx = 0; c.gridy =4;c.gridwidth =1; c.weightx = 1.0;c.weighty = 1.0; c.fill = GridBagConstraints.BOTH; 
     JScrollPane scrollPane = new JScrollPane(resultPane); 
     main.add(scrollPane, c); 
     c.gridx = 1; c.gridy =4;c.gridwidth = 1; c.weightx = 1.0;c.weighty = 1.0; c.fill = GridBagConstraints.BOTH; 

     hotspotPanel.add(subHotspotPanel, "SUBPANEL"); 
     hotspotPanel.add(indelHotspotPanel, "INDELPANEL"); 
     hotspotPanel.add(new JPanel(), "BLANK"); 
     main.add(hotspotPanel, c); 
     frame.add(header, BorderLayout.NORTH); 
     frame.add(main, BorderLayout.CENTER); 

     frame.pack(); 
     frame.setVisible(true); 
    } 

} 
+1

'私はどのdirection.'でフレームのサイズを変更した後、サイズ変更の問題が消える - フレームがすでに表示された後、あなたはフレームにコンポーネントを追加しているように聞こえます。 'setVisible(true)'ステートメントは、すべてのコンポーネントがフレームに追加された後に呼び出す必要があります。さらにヘルプが必要な場合は、問題を示す適切な[SSCCE](http://sscce.org/)を投稿してください。 – camickr

+0

SSCCE –

+0

の更新されたポストが問題ではないことが確認されました。コードがコンパイルされていません。ChartPanelクラスへのアクセス権がありません。もう一度 'SSCCE'のポイントは、コードを単純化して問題を実証することです。現在のコードをコアダンプしたいだけではありません。あなたは本当に問題を示すためにすべてのコンポーネントが必要ですか?無関係なコードを削除すると、問題が見つかる可能性があります。 DocumentFilterも持っていません。レイアウト問題にはどのように関連していますか? – camickr

答えて

1

このexampleを使用して、それがChartPanelCardLayoutで正常に動作することは明らかです。以下の例では、の初期サイズを設定するために、hereと表示されているようにgetPreferredSize()を上書きしています。各カードでGridLayoutを使用すると、囲み枠のサイズが変更されたときにグラフがパネルに表示されます。

image

import java.awt.BorderLayout; 
import java.awt.CardLayout; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.util.Random; 
import javax.swing.AbstractAction; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import org.jfree.chart.ChartFactory; 
import org.jfree.chart.ChartPanel; 
import org.jfree.chart.JFreeChart; 
import org.jfree.data.general.DefaultPieDataset; 

/** 
* @see https://stackoverflow.com/a/36392696/230513 
* @see https://stackoverflow.com/a/36243395/230513 
*/ 
public class CardPanel extends JPanel { 

    private static final Random r = new Random(); 
    private static final JPanel cards = new JPanel(new CardLayout()); 
    private final String name; 

    public CardPanel(String name) { 
     super(new GridLayout()); 
     this.name = name; 
     DefaultPieDataset pieDataset = new DefaultPieDataset(); 
     pieDataset.setValue("One", r.nextInt(10) + 10); 
     pieDataset.setValue("Two", r.nextInt(20) + 10); 
     pieDataset.setValue("Three", r.nextInt(30) + 10); 
     JFreeChart chart = ChartFactory.createPieChart3D(
      "3D Pie Chart", pieDataset, true, true, true); 
     chart.setTitle(name); 
     this.add(new ChartPanel(chart) { 

      @Override 
      public Dimension getPreferredSize() { 
       return new Dimension(500, (int)(500 * 0.62)); 
      } 
     }); 
    } 

    @Override 
    public String toString() { 
     return name; 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       create(); 
      } 
     }); 
    } 

    private static void create() { 
     JFrame f = new JFrame(); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     for (int i = 1; i < 9; i++) { 
      CardPanel p = new CardPanel("Chart " + String.valueOf(i)); 
      cards.add(p, p.toString()); 
     } 
     JPanel control = new JPanel(); 
     control.add(new JButton(new AbstractAction("\u22b2Prev") { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       CardLayout cl = (CardLayout) cards.getLayout(); 
       cl.previous(cards); 
      } 
     })); 
     control.add(new JButton(new AbstractAction("Next\u22b3") { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       CardLayout cl = (CardLayout) cards.getLayout(); 
       cl.next(cards); 
      } 
     })); 
     f.add(cards, BorderLayout.CENTER); 
     f.add(control, BorderLayout.SOUTH); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 
} 
関連する問題