Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Java > Desktop-Applikationen und Grafik > Button Problem bei einem Dialog
Antwort
 
Themen-Optionen
Alt 30.11.2004, 16:40   Nach oben    #1
Swingman
Neuer Benutzer
 
Registriert seit: 30.11.2004
Beiträge: 16
Standard Button Problem bei einem Dialog

Hallo,
ich versuche Gerade einen Dialog zu Programmieren und dabei z.B drei Buttons nebeneinander(horizontal), mit gleicher Größe und mit einer Lücke zwischen den Buttons. Außerdem soll es dynamisch sein. D.h. wenn sich der Inhalt des Button Strings ändert sollte es sich anpassen. Das Problem ist dabei, dass es keinen Layoutmanager gibt, mit dem ich alle Faktoren gleichzeitig erreichen kann. Deshalb habe ich versucht die Layoutmanager miteinander zu verschachteln mit GridLayout und BoxLayout. Das ging auch nicht so richtig, weil wenn das Fenster wächst wachsen auch die Buttons mit, das soll nicht sein.

Danke für die Hilfe im voraus.
Swingman ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.11.2004, 20:10   Nach oben    #2
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 433
Standard

Hi,

Codeschnippsel wären gut. Ich persönlich nutze immer das GridBagLayout. Du musst den Komponenten aber auch eine Größe zuweisen, sonst switchen die immer die Größe.
__________________
Denk mal darüber nach...

Lars

ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen.
www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de
Sym ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.12.2004, 08:43   Nach oben    #3
Swingman
Neuer Benutzer
 
Registriert seit: 30.11.2004
Beiträge: 16
Standard

Hi Lars,
Kannst Du bisschen erläutern wie Du es meinst. Ich habe es nicht ganz verstanden
Aber mit dem GridBagLayout wird es glaube ich nicht ganz gehen, weil die Größe der Buttons automatisch je nach dem übergebenen größten Buttonstring gleich groß gesetzt werden müssen. Nebenbei gesagt versuche ich gerade ein ähnliches Dialogfenster wie JOptionPane zu programmieren. Mit der Eigenschaft, dass man die Buttonnamen je nach Bedarf setzen kann, also z.B Ja in verschiedenen Sprachen und dadurch variiert die Buttongröße.
Swingman ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.12.2004, 12:52   Nach oben    #4
pago
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.091
Standard

Warum programmierst du nicht einfach so einen Layout-Manager?

Bitte schön (könnte noch optimiert werden (was ich auch noch machen werde), aber es funktioniert
Java Code:
  1. /*
  2. This file is part of LayoutHelper - Utilities for LayoutManagment
  3. Copyright (c) 2004 Patrick Gotthardt
  4.  
  5. This program is free software; you can redistribute it and/or
  6. modify it under the terms of the GNU General Public License
  7. as published by the Free Software Foundation; either version 2
  8. of the License, or any later version.
  9.  
  10. This program is distributed in the hope that it will be useful,
  11. but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. GNU General Public License for more details.
  14.  
  15. You should have received a copy of the GNU General Public License
  16. along with this program; if not, write to the Free Software
  17. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  18. */
  19. package com.pagosoft.layout;
  20.  
  21. import java.awt.*;
  22.  
  23.  
  24. /**
  25. * &lt:p>A very handy layout thought for using it in buttonbars or
  26. * things like that.</p>
  27. * &lt:p>It gives all added components the same size
  28. * (preferredSize of child components) and aligns them in one row.</p>
  29. * &lt:p>You may specify the alignment of the components to be at the
  30. * line start / end or centered.</p>
  31. * &lt:p>It is very good to use as the LayoutManager for a ButtonBar
  32. * or something like that. This is a small sample of how to use it:</p>
  33. * &lt:pre>{@code
  34. * JPanel p = new JPanel(new EqualSizesLayout(5, EqualSizesLayout.LINE_END));
  35. * p.add(new JButton("Test"));
  36. * p.add(new JButton("Longer Test"));
  37. * p.add(new JButton("Maybe the longest test"));
  38. *}</pre>
  39. * &lt:p>It is very simple to use as you can see.</p>
  40. *
  41. * @author Patrick Gotthardt
  42. */
  43. public class EqualSizesLayout implements LayoutManager {
  44.     protected int gap, alignment;
  45.     protected Dimension defCompSize, requiredSize;
  46.    
  47.     public static final int LINE_START = 0;
  48.     public static final int CENTER = 1;
  49.     public static final int LINE_END = 2;
  50.    
  51.     public EqualSizesLayout() {
  52.         this(0, CENTER);
  53.     }
  54.    
  55.     public EqualSizesLayout(int gap) {
  56.         this(gap, CENTER);
  57.     }
  58.    
  59.     public EqualSizesLayout(int gap, int align) {
  60.         this.gap = gap;
  61.         alignment = align;
  62.     }
  63.    
  64.     /* Required by LayoutManager. */
  65.     public void addLayoutComponent(String name, Component comp) {
  66.     }
  67.  
  68.     /* Required by LayoutManager. */
  69.     public void removeLayoutComponent(Component comp) {
  70.     }
  71.    
  72.     public Dimension preferredLayoutSize(Container parent) {
  73.         int limit = parent.getComponentCount();
  74.         Insets i = parent.getInsets();
  75.         int width = i.left + i.right;
  76.         int height = i.top + i.bottom;
  77.        
  78.         Dimension compSize = preferredComponentSize(parent);
  79.         return requiredSize = new Dimension((compSize.width*limit)+(gap*limit), compSize.height + height);
  80.     }
  81.    
  82.     public Dimension minimumLayoutSize(Container parent) {
  83.         int limit = parent.getComponentCount();
  84.         Insets i = parent.getInsets();
  85.         int width = i.left + i.right;
  86.         int height = i.top + i.bottom;
  87.        
  88.         Dimension compSize = minimumComponentSize(parent);
  89.         return new Dimension((compSize.width*limit)+(gap*limit), compSize.height + height);
  90.     }
  91.    
  92.     protected Dimension minimumComponentSize(Container parent) {
  93.         int limit = parent.getComponentCount();
  94.         int defCompWidth = 0, defCompHeight = 0;
  95.         Dimension size;
  96.         for(int index = 0; index < limit; index++) {
  97.             size = parent.getComponent(index).getMinimumSize();
  98.             defCompWidth = Math.max(defCompWidth, size.width);
  99.             defCompHeight = Math.max(defCompHeight, size.height);
  100.         }
  101.         return new Dimension(defCompWidth, defCompHeight);
  102.     }
  103.    
  104.     protected Dimension preferredComponentSize(Container parent) {
  105.         int limit = parent.getComponentCount();
  106.         int defCompWidth = 0, defCompHeight = 0;
  107.         Dimension size;
  108.         for(int index = 0; index < limit; index++) {
  109.             size = parent.getComponent(index).getPreferredSize();
  110.             defCompWidth = Math.max(defCompWidth, size.width);
  111.             defCompHeight = Math.max(defCompHeight, size.height);
  112.         }
  113.         return defCompSize = new Dimension(defCompWidth, defCompHeight);
  114.     }
  115.    
  116.     protected Dimension takeAllSpace(Container parent) {
  117.         int limit = parent.getComponentCount();
  118.         Dimension size = parent.getSize();
  119.         Insets i = parent.getInsets();
  120.         return new Dimension((size.width / limit) - ((gap*2) / limit) - (i.left / limit) - (i.right / limit), size.height - i.top - i.bottom);
  121.     }
  122.    
  123.     public void layoutContainer(Container parent) {
  124.         requiredSize = preferredLayoutSize(parent);
  125.         Dimension availableSize = parent.getSize();
  126.         if(defCompSize.height > availableSize.height) {
  127.             defCompSize.height = availableSize.height;
  128.         }
  129.         if(requiredSize.width > availableSize.width) {
  130.             defCompSize = minimumComponentSize(parent);
  131.             if(defCompSize.height > availableSize.height) {
  132.                 defCompSize.height = availableSize.height;
  133.             }
  134.         }
  135.         if(requiredSize.width > availableSize.width) {
  136.             int oldHeight = defCompSize.height;
  137.             defCompSize = takeAllSpace(parent);
  138.             if(defCompSize.height > oldHeight) {
  139.                 defCompSize.height = oldHeight;
  140.             }
  141.         }
  142.        
  143.         Insets i = parent.getInsets();
  144.         int x = i.left;
  145.         int y = i.top;
  146.        
  147.         if(requiredSize.width < availableSize.width) {
  148.             switch(alignment) {
  149.                 case LINE_END:
  150.                     x += availableSize.width - requiredSize.width;
  151.                     break;
  152.                 case CENTER:
  153.                     x += (availableSize.width - requiredSize.width)/2;
  154.                     break;
  155.             }
  156.         }
  157.        
  158.         int limit = parent.getComponentCount();
  159.         Component child;
  160.         for(int index = 0; index < limit; index++) {
  161.             child = parent.getComponent(index);
  162.             child.setBounds(x, y, defCompSize.width, defCompSize.height);
  163.             x += defCompSize.width + gap;
  164.         }
  165.     }
  166. }

Hilfts?

Edit: So. LayoutManager überarbeitet, funktioniert nun einwandfrei (zumindest bei meinem Test).

Anwendung:
Java Code:
  1. JPanel root = new JPanel(new BorderLayout());
  2. root.add(getContentPane(), BorderLayout.CENTER);
  3. JPanel buttons = new JPanel(new EqualSizesLayout(5, EqualSizesLayout.LINE_END));
  4. buttons.add(new JButton("OK"));
  5. buttons.add(new JButton("Cancel"));
  6. root.add(buttons, BorderLayout.PAGE_END);

War`s das, was du haben wolltest?
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.12.2004, 15:27   Nach oben    #5
Swingman
Neuer Benutzer
 
Registriert seit: 30.11.2004
Beiträge: 16
Standard

Danke funktioniert wunderbar
Swingman ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Vokabeltrainer asenodin Allgemeine Java-Programmierung 9 28.05.2006 21:04
Positionierung eines aufpoppenden Dialogs Sayang Desktop-Applikationen und Grafik 4 15.04.2006 11:52
4gewinnt problem sonja Desktop-Applikationen und Grafik 4 18.09.2005 20:23
kleines problem mit events und buttons lost-prophet Allgemeine Java-Programmierung 3 01.06.2005 09:36
Button Problem... RooKee Desktop-Applikationen und Grafik 3 27.10.2004 13:13


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:12 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.0.0) und vBSEO.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44