[Swing]Button-/Textfeldgröße/Layout(manager)

Anime-Otaku

Erfahrenes Mitglied
Ich muss gestehen ich bin ein wenig Anfänger in Sachen GUI Programmierung unter Java.

Ich schreibe gerade an dem Layout meines eigenen File Managers (ähnlich wie midnight commander, salamander, total commander & Co solls werden)

Source: http://kanrinin.svn.sourceforge.net...nin/core/Kanrinin.java?revision=7&view=markup

Ich habe meine von JFrame abgeleitete Swing GUI namens Kanrinin.

Dann habe ich auch ohne Probleme eine Menüleiste eingepflegt.

Der Rest ist wie bei Filemanagern üblich in 2 Bereiche aufgeteilt. Das habe ich mit JSplitPane gemacht, da das auf und zu klappen auch ein schönes Zusatzfeature ist.:)

Nun möchte ich jedoch jeweils in den 2 Bereichen oben einen Button machen, der wie eine Art Menü funktioniert (man drückt drauf und es klappt eine Auswahl an Festplatten auf). Dieser Button sollte eine feste größe haben. Rechts daneben soll ein Textfeld sein, mit dem aktuellen Standort im Dateisystem.
Dieses Textfeld soll jedoch automatisch die restliche verfügbare Breite in Anspruch nehmen und das ist mein Problem.

Ich hoffe ihr könnt mir helfen.

Andere Tips und Ratschläge sind auch gerne gesehen.
 
Das wäre auch denkbar^^

aber das ändert glaub ich nichts am Grundproblem, dass das Textfeld sich nicht automatisch an die Breite anpasst und die Combobox bzw. der "aufklappbare Button" von der Breite her relativ statisch bleibt. (höchstens wenn eine neue Festplatte angeschlossen wird soll sich da was ändern)
 
Der Button soll doch die gleiche Breite haben, sagtest du. Soll das Textfield mit in der Toolbar sein oder wo anders?

MFG

zEriX
 
Das Textfeld soll direkt rechts neben dem "Button" sein.

Die beiden sollen im oberen Bereich jeder Seite von dem JSplitPane sein. (also im Endeffekt spiegeld man die linke Seite ja nur auf die Rechte am Ende)
 
Also nicht in der Toolbar. Wenn du einen LayoutManager benutzt, dann wird die Größe automatisch angepasst.

MFG

zEriX
 
Vielleicht stell ich mich auch nur dumm an....aber irgendwie komm ich mit den Layoutmanager nicht zurecht. Meistens war die Länge des Textfeldes, auf die Länge des hardcodierten Anfangtextes beschränkt oder er hatte den Button auch gleichmäßig mit vergrößert (GridLayout, was dabei natürlich auch logisch ist):confused:

Oder was für ein Layoutmanager muss ich nehmen, dem ich sagen du Button bist soviel breit und dieses Textfeld kriegt die Restbreite?
 
Schau mal hier
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

/**
 * @author jens
 * @version 0.0.1
 * 
 * Copyright 2007 Jens Melzer This program is distributed under the terms of the
 * GNU General Public License (license-copying.txt)
 * 
 */
public class Kanrinin extends javax.swing.JFrame {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private JMenuBar jMenuBarTop;
    private JMenu jMenuFile;
    private JMenuItem jMenuItemQuit;
    private JMenu jMenuHelp;
    private JMenuItem jMenuItemAbout;
    private JSplitPane jSplitPane;
    private JPanel jPanelLeftPanel;
    private JPanel jPanelleftTopPanel;
    private JButton jButtonHddLeft;
    /**
     * ActionListener for a normal program termination
     */
    private ActionListener exitNormalAction = new ActionListener() {
	public void actionPerformed(ActionEvent e) {
	    exit(0, null);
	}

    };

    /**
     * Auto-generated main method to display this JFrame
     */
    public static void main(String[] args) {
	SwingUtilities.invokeLater(new Runnable() {
	    public void run() {
		Kanrinin inst = new Kanrinin();
		inst.setLocationRelativeTo(null);
	    }
	});
    }

    public Kanrinin() {
	super();
	initGUI();
    }

    /**
     * @param code -
     *                exit code
     * @param errorMsg -
     *                error message, if the program termination is abnormal, can
     *                be null
     */
    private void exit(int code, String errorMsg) {
	if (code == 0 || errorMsg == null)
	    System.exit(code);
    }

    private void initGUI() {
	try {
	    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
	    this.setTitle("Kanrinin - the file manager");
	    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	    this.setSize(600, 700);
	    jMenuBarTop = new JMenuBar();
	    this.setJMenuBar(jMenuBarTop);
	    jMenuFile = new JMenu();
	    jMenuFile.setText("File");
	    jMenuItemQuit = new JMenuItem();
	    jMenuItemQuit.setText("Quit");
	    jMenuItemQuit.addActionListener(exitNormalAction);
	    jMenuFile.add(jMenuItemQuit);
	    jMenuBarTop.add(jMenuFile);
	    this.setVisible(true);
	    jSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
	    this.setContentPane(jSplitPane);
	    jSplitPane.setOneTouchExpandable(true);
	    jSplitPane.setDividerLocation(0.5);
	    jPanelLeftPanel = new JPanel(new BorderLayout());
	    jPanelleftTopPanel = new JPanel();
	    jPanelLeftPanel.add(jPanelleftTopPanel, BorderLayout.NORTH);
	    jPanelleftTopPanel.setLayout(new BorderLayout());
	    jSplitPane.setLeftComponent(jPanelLeftPanel);
	
	    
	    jPanelleftTopPanel.add(new JComboBox(new Object[]{"test", "Test3"}),BorderLayout.NORTH);
	    

	    JPanel rightPanel = new JPanel();
	    rightPanel.setBackground(Color.YELLOW);
	    jSplitPane.setRightComponent(rightPanel);
	    jSplitPane.setResizeWeight(0.5);

	} catch (Exception e) {
	    e.printStackTrace();
	    exit(-1, "exception while initialising gui");
	}
    }
}

MFG

zEriX
 
Irgendwie vermisse ich da das Textfeld, was rechts neben der Combobox/dem Button sein soll.

Also die Breite der Combobox soll maximal die Breite des längsten Textes in der Combobox sein. Das Textfeld rechts daneben soll editierbar sein und die restliche Breite in Anspruch nehmen.

JFormattedTextField jTextField = new JFormattedTextField("home/kjsnkjdnskgnsd");
 
Du kannst doch von der ComboBox das Textfeld nehmen. Ok, hier ist das Textfeld dann rechts neben dem Button.

Ich meinte eigentlich eine JComboBox anstelle von dem Button und dem Textfeld. da die ja beides Beinhaltet. Die ganzen Explorer/Commander haben an der Stelle ja auch eine ComboBox, bei der man den Pfad auwählen kann.

MFG

zEriX
 

Neue Beiträge

Zurück