GridbagLayout positionierungsproblem

aha_01

Aktives Mitglied
Hi,
ich habe folgendes Programm:
Java:
package tasksEditorPack;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;


public class TasksEditor {

	/**  The global tabbed pane*/
	private static JTabbedPane tabbedPane = new JTabbedPane();

	/**
	 * Adds components to the gridbaglayout
	 * @param cont
	 * @param gbl
	 * @param c
	 * @param x
	 * @param y
	 * @param width
	 * @param height
	 * @param weightx
	 * @param weighty
	 */
	static void addComponent(Container cont, GridBagLayout gbl, Component c,
			int x, int y, int width, int height, double weightx, double weighty) {
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.fill = GridBagConstraints.BOTH;
		gbc.gridx = x;
		gbc.gridy = y;
		gbc.gridwidth = width;
		gbc.gridheight = height;
		gbc.weightx = weightx;
		gbc.weighty = weighty;
		// gbc.insets = new Insets(2,2,2,2);//margin:2px;
		//gbc.anchor = GridBagConstraints.NORTH;//.SOUTHWEST;
		gbl.setConstraints(c, gbc);
		cont.add(c);
	}

	/**
	 * Adds tabbed panes
	 * @param cont
	 * @param tabName
	 * @return
	 */
	static JPanel add_tabb(Container frameCont, String tabName) {
		// Create one content pane of the tab
		JPanel TabContPane = new JPanel(); TabContPane.setName("TabContPane");
		// Add content's pane to the Tab and set the selected index
		tabbedPane.addTab(tabName, TabContPane);
		tabbedPane.setSelectedIndex(0);
		// Style the tab
		UIManager.put("TabbedPane.selected", new Color(0xA7C0E5));
		// Add the tab to the container
		frameCont.add(tabbedPane, BorderLayout.CENTER);
		return TabContPane;
	}
	
	static void createNewTask(Container cont, GridBagLayout gbl) {
		//JOptionPane.showMessageDialog(null, "New task was clicked...");
		JTextField jt1 = new JTextField(50);
		JCheckBox chb_sel = new JCheckBox();

		addComponent(cont, gbl, jt1, 0, 1, 6, 1, 0, 0);
		addComponent(cont, gbl, chb_sel, 6, 1, 1, 1, 0, 0);

	}

	/** @param args */
	public static void main(String[] args) {
		/** Declarations */
		JFrame frame = new JFrame(); 
		Container fcont = frame.getContentPane();
		JTextField jt1 = new JTextField(50);
		JCheckBox chb_sel = new JCheckBox();
		JButton butNew = new JButton("Add new task");
		JButton butEdit = new JButton("Edit tasks");
		JButton butDel = new JButton("Delete task");
		JButton butDeactiv = new JButton("Deactivate task");
		JButton butDone = new JButton("Task done");
		final GridBagLayout gbl = new GridBagLayout();
		final JPanel tabPane1 = add_tabb(fcont, "Task editor");
		add_tabb(fcont, "Other Tab");
		JPanel placeHolder = new JPanel();
		JPanel placeHolder2 = new JPanel();
		JPanel placeHolder3 = new JPanel();
		
		/** Initializing */
		tabbedPane.setName("tabbedPane");
		tabPane1.setLayout(gbl);
		frame.setName("MainFrame");
		fcont.setName("MainFContainer");
		chb_sel.setName("chb_sel");//chb_done.setBackground(new
		jt1.setName("jt1");//jt1.setEditable(false); //jt1.setEnabled(false);
		
		/** Styling  */
		fcont.setBackground(Color.DARK_GRAY);
		butNew.setMargin(new Insets(0, 0, 0, 0));
		butNew.setSize(new Dimension(120, 30));
		tabPane1.setBackground(Color.LIGHT_GRAY);
		//tabPane1.setBorder(BorderFactory.createLineBorder(Color.gray));
		//tabPane1.setSize(760, 300);
		
		/** Adding components */
		addComponent(tabPane1, gbl, butNew, 0, 0, 1, 1, 1.0, 0);
		addComponent(tabPane1, gbl, butEdit, 1, 0, 1, 1, 0, 0);
		addComponent(tabPane1, gbl, butDel, 2, 0, 1, 1, 0, 0);
		addComponent(tabPane1, gbl, butDeactiv, 3, 0, 1, 1,0, 0);
		addComponent(tabPane1, gbl, butDone, 4, 0, 1, 1, 0, 0);
		addComponent(tabPane1, gbl, placeHolder, 5, 0, 1, 1, 1.0, 0);
		addComponent(tabPane1, gbl, placeHolder2, 0, 1, 6, 1, 0, 0);
		addComponent(tabPane1, gbl, placeHolder3, 0, 1, 7, 1, 0, 0);
		//addComponent(tabPane1, gbl, jt1, 0, 1, 6, 1, 0, 0);
		//addComponent(tabPane1, gbl, chb_sel, 7, 1, 1, 1, 0, 0);
		
		/** Adding functionalities */
		butNew.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) { 
				createNewTask(tabPane1,gbl);
			}
		});
		
		/** Debuging */
		//System.out.println("tabPane1.getName(): "+tabPane1.getName());
		//System.out.println("tabPane1.getComponentCount(): "+tabPane1.getComponentCount());
		//System.out.println("jt1.getLocation(): "+jt1.getLocation());
		//System.out.println("jt1.getMargin(): "+jt1.getMargin());
		//System.out.println("jt1.getParent(): "+jt1.getParent().getName());
		//System.out.println("jt1.getRootPane(): "+jt1.getRootPane().getName());
		//System.out.println("jt1.getSize(): "+jt1.getSize());
		//System.out.println("jt1.getLayout(): "+jt1.getLayout());
		
		/** Displaying */
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setMinimumSize(new Dimension(670, 200));
		frame.pack();
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}// MAIN

}

Das Problem ich möchte den Inhalt
Java:
/** Adding components */
		addComponent(tabPane1, gbl, butNew, 0, 0, 1, 1, 1.0, 0);
		addComponent(tabPane1, gbl, butEdit, 1, 0, 1, 1, 0, 0);
		addComponent(tabPane1, gbl, butDel, 2, 0, 1, 1, 0, 0);
		addComponent(tabPane1, gbl, butDeactiv, 3, 0, 1, 1,0, 0);
		addComponent(tabPane1, gbl, butDone, 4, 0, 1, 1, 0, 0);
		addComponent(tabPane1, gbl, placeHolder, 5, 0, 1, 1, 1.0, 0);
		addComponent(tabPane1, gbl, placeHolder2, 0, 1, 6, 1, 0, 0);
		addComponent(tabPane1, gbl, placeHolder3, 0, 1, 7, 1, 0, 0);
nicht in der Mitte haben sondern ganz oben am Start der Tab und ich kriege es irgendwie nicht hin ???:L

Kann Jmd mir bitte sagen was ich hier verkehrt mache oder was ich dafür noch machen soll 😱

Bem.: Einfach copy and paste den Code. Das ergibt eine GUI :autsch:


Beste Grüße
Aha
 
Zuletzt bearbeitet:
Es war nicht ganz leicht nachzuvollziehen, was du in deinen add_... Funktionen eigentlich machst. Sauberen Stil würde ich das nicht nennen. Zu deinem Problem: Du musst die weighty von deinen Placeholdern unter deinen Buttons auf 1 setzen. Dann drücken die Placeholder quasi die Buttons nach oben.

So hätte das der WindowProBuilder fabriziert, das ist zwar auch nicht das gelbe vom Ei aber doch übersichtlicher als dein code:
Java:
 public static void main(String[] args) {
        /** Declarations */
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setMinimumSize(new Dimension(670, 200));
        frame.pack();
        frame.setLocationRelativeTo(null);
        
        JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
        frame.getContentPane().add(tabbedPane, BorderLayout.CENTER);
        
        JPanel panel = new JPanel();
        tabbedPane.addTab("Task tab", null, panel, null);
        GridBagLayout gbl_panel = new GridBagLayout();
        gbl_panel.columnWidths = new int[]{0, 0, 0, 0, 0};
        gbl_panel.rowHeights = new int[]{0, 0};
        gbl_panel.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
        gbl_panel.rowWeights = new double[]{0.0, Double.MIN_VALUE};
        panel.setLayout(gbl_panel);
        
        JButton btnNewButton = new JButton("New button");
        GridBagConstraints gbc_btnNewButton = new GridBagConstraints();
        gbc_btnNewButton.insets = new Insets(0, 0, 0, 5);
        gbc_btnNewButton.gridx = 0;
        gbc_btnNewButton.gridy = 0;
        panel.add(btnNewButton, gbc_btnNewButton);
        
        JButton btnNewButton_1 = new JButton("New button");
        GridBagConstraints gbc_btnNewButton_1 = new GridBagConstraints();
        gbc_btnNewButton_1.insets = new Insets(0, 0, 0, 5);
        gbc_btnNewButton_1.gridx = 1;
        gbc_btnNewButton_1.gridy = 0;
        panel.add(btnNewButton_1, gbc_btnNewButton_1);
        
        JButton btnNewButton_2 = new JButton("New button");
        GridBagConstraints gbc_btnNewButton_2 = new GridBagConstraints();
        gbc_btnNewButton_2.insets = new Insets(0, 0, 0, 5);
        gbc_btnNewButton_2.gridx = 2;
        gbc_btnNewButton_2.gridy = 0;
        panel.add(btnNewButton_2, gbc_btnNewButton_2);
        
        JButton btnNewButton_3 = new JButton("New button");
        GridBagConstraints gbc_btnNewButton_3 = new GridBagConstraints();
        gbc_btnNewButton_3.gridx = 3;
        gbc_btnNewButton_3.gridy = 0;
        panel.add(btnNewButton_3, gbc_btnNewButton_3);
        
        JPanel panel_1 = new JPanel();
        tabbedPane.addTab("New tab", null, panel_1, null);
        frame.setVisible(true);
    }
 
Zuletzt bearbeitet:
Vielen Dank, das hat mir weitergeholfen :toll:
Ich glaube ich muss mich mit dem GUIBuilder ein bisschen beschäftigen :noe:


Schöne Grüße
Aha
 
Ich wollte dir nur kurz zeigen wies übersichtlicher geht. Der Gui Builder kocht auch nur mit Wasser und macht dann eben anderswo Probleme. Der Gui Buidler bringt nur eine Zeitersparnis, wenn du das gleiche auch manuell hinkriegst.
 
Ja ich bin auch ein Fun davon Alles zu Fuß zu programmieren aber manchmal hilft es auf der Schnelle mit dem GUI Builder die Grundstruktur einer Oberfläche zu machen und dann weiter manuell programmieren 😉
 

Zurück
Oben