Dieser Code verwendet das Kartenlayout, da ich die Fensteranzeige ändern möchte, anstatt mehrere Fenster (oder Rahmen) zu haben. Deshalb möchte ich mehrere Panels, die scheinbar funktionieren.GridBag Layout, das als Flow-Layout innerhalb eines Kartenlayouts fungiert. Was mache ich falsch?
Innerhalb der Panels möchte ich jedoch das Gridbag-Layout für die Positionierung von Komponenten verwenden. Aber es funktioniert nicht! Es fungiert als Flow-Layout. Kann mir jemand helfen, diese Hürde zu überwinden? Bitte.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class another
{
private JPanel contentPane;
private MyPanel panel1;
private MyPanel2 panel2;
private void displayGUI()
{
JFrame frame = new JFrame("Card Layout Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel contentPane = new JPanel();
contentPane.setLayout(new CardLayout());
panel1 = new MyPanel(contentPane);
panel2 = new MyPanel2();
contentPane.add(panel1, "Panel 1");
contentPane.add(panel2, "Panel 2");
frame.setContentPane(contentPane);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String... args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new another().displayGUI();
}
});
}
}
class MyPanel extends JPanel {
private JTextField How;
private JLabel jcomp2;
private JLabel jcomp3;
private JButton jcomp4;
private JPanel contentPane;
private JPanel myPanel1;
public MyPanel(JPanel panel)
{
contentPane = panel;
//construct components
How = new JTextField (1);
jcomp2 = new JLabel ("Label2");
jcomp3 = new JLabel ("Label3");
jcomp4 = new JButton ("openNewWindow");
myPanel1 = new JPanel();
//adjust size and set layout
setPreferredSize (new Dimension (600, 600));
setLayout (new GridBagLayout());
//set component bounds (only needed by Absolute Positioning)
/*
How.setBounds (245, 50, 60, 25);
jcomp2.setBounds (35, 30, 185, 50);
jcomp3.setBounds (250, 30, 60, 20);
jcomp4.setLocation(0, 0);
jcomp4.setSize(315, 25);
*/
insert(jcomp2, 0, 0, 1, 1);
insert(jcomp3, 0, 1, 1, 1);
insert(jcomp4, 1, 0, 1, 1);
jcomp4.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
CardLayout cardLayout = (CardLayout) contentPane.getLayout();
cardLayout.next(contentPane);
}
});
//add components
//add (How);
add (jcomp2);
add (jcomp3);
add (jcomp4);
}
public void insert(Component c, int gridX, int gridY, int gridW, int gridH)
{
GridBagConstraints constraint = new GridBagConstraints();
constraint.gridx = gridX;
constraint.gridy = gridY;
constraint.gridwidth = gridW;
constraint.gridheight = gridH;
constraint.anchor = GridBagConstraints.LINE_START;
myPanel1.add(c, constraint);
}
}
class MyPanel2 extends JPanel {
private JButton jcomp1;
private JButton jcomp2;
private JButton jcomp3;
private JTextField jcomp4;
public MyPanel2() {
//construct components
jcomp1 = new JButton ("test1");
jcomp2 = new JButton ("test2");
jcomp3 = new JButton ("test3");
jcomp4 = new JTextField (5);
//adjust size and set layout
setPreferredSize (new Dimension (395, 156));
setLayout (null);
//set component bounds (only needed by Absolute Positioning)
jcomp1.setBounds (20, 45, 100, 25);
jcomp2.setBounds (135, 60, 100, 25);
jcomp3.setBounds (260, 35, 100, 25);
jcomp4.setBounds (105, 115, 100, 25);
//add components
add (jcomp1);
add (jcomp2);
add (jcomp3);
add (jcomp4);
}
}
Welche Gesamt GUI Aussehen versuchen Sie zu erreichen? –
Ich möchte idealerweise einen Inhaltsbereich erstellen, der die Anzeige abhängig davon ändert, welche Taste gedrückt wird. Auf jedem Fenster bleibt eine Überschrift gleich. – notAllThere15
Dann verwendet die Haupt-GUI BorderLayout, der Titel wird in der Position "BorderLayout.PAGE_START" gehalten und der JPanel, der CardLayout verwendet, wird in der Position "BorderLayout.CENTER" gehalten. Aber das beantwortet nicht, was Ihr GridBagLayout JPanel versucht zu erreichen. –