Ich habe eine ziemlich einfache GUI organisiert mit einem GridBagLayout
. Der komplexeste Teil ist der untere Bereich, in dem West mit ScrollPane gefüllt ist und der rechte Bereich ist ein Bereich mit einem CardLayout
, der mehrere ChartPanels enthält, so dass ich zwischen einigen Graphen wechseln kann.Hinzufügen von ChartPanel zu CardLayout
Mein Problem kommt, wenn ich das Programm starte.
Die Redimensionierung Problem geht weg, nachdem ich den Rahmen in jeder Richtung ändern. Ich habe bestätigt, dass das Diagrammfeld das Problem ist, da dies nicht durch das Hinzufügen des CardLayout
Panels behoben wird. Ich erstelle eine leere ChartPanel
und füllen Sie es später, nachdem einige Maßnahmen ergriffen werden, aber das ist, was ich getan habe:
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);
}
}
'Die Redimensionierung Problem geht weg, nachdem ich den Rahmen in jedem direction.' Größe ändern - klingt wie Sie Komponenten an den Rahmen hinzugefügt werden, nachdem der Rahmen bereits sichtbar ist. Die Anweisung 'setVisible (true) 'sollte aufgerufen werden, NACHDEM alle Komponenten zum Rahmen hinzugefügt wurden. Wenn Sie mehr Hilfe benötigen, dann veröffentlichen Sie eine richtige [SSCCE] (http://sscce.org/), die das Problem demonstriert. – camickr
Bestätigt, dass das nicht das Problem ist, aktualisierte Post mit SSCCE –
Der Code kompiliert nicht, wir haben keinen Zugriff auf die ChartPanel-Klasse. Wiederum ist der Punkt eines 'SSCCE', den Code zu vereinfachen, das Problem zu demonstrieren. Wir wollen nicht nur einen Core Dump Ihres aktuellen Codes. Benötigen Sie wirklich alle Komponenten, um das Problem zu demonstrieren? Die Chancen stehen gut, wenn Sie irrelevanten Code entfernen, werden Sie das Problem finden. Wir haben auch nicht den DocumentFilter. Wie ist das für ein Layout-Problem relevant? – camickr