Design-Probleme (Swing-Anfänger)

Status
Nicht offen für weitere Antworten.

Live

Mitglied
Hallo,

teste gerade mal ein wenig in der Aktion "Mein Programm soll schöner werden" rum 😉

Dazu (Code s.u. - logo.jpg ist eine 200*300 Bilddatei) habe ich ein paar Fragen, wo ihr mir vielleicht helfen könnt:
1. Ich möchte einen Rahmen mit der Beschriftung "Bitte auswählen" (TitledBorder !?) um die Buttons "Neue Datei erstellen" und "Datei laden" hinzufügen - wie geht das?
2. Bei Größenänderung des Fensters, sollen dieselben Buttons die Breite des Fensters ausnutzen - tun sie aber nicht 🙁 Woran liegt das - warum reicht die Angabe "gbc.fill = GridBagConstraints.HORIZONTAL;" nicht?
3. Wie schaffe ich es, dass - nochmal die beiden Buttons - doppelt so "dick/hoch" sind?
4. Wie ist es möglich, den Hintergrund (z.B. Blau statt grau) zu färben?

So banal die Fragen auch sind, bin für Hilfe super dankbar! :autsch: 😳


Code:
package test;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class rahmen {

	public static void main(String[] args) {
		
	    JFrame startmenue = new JFrame("Start");
	    final JDialog f = new JDialog(startmenue,"Start",true);
	    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	    startmenue.setSize(500,250);  	
	  	
	    GridBagLayout gbl = new GridBagLayout();
	    GridBagConstraints gbc;
	    startmenue.getContentPane().setLayout(gbl);			
		
	    JLabel bild = new JLabel(new ImageIcon("logo.jpg"));	
	    gbc = makegbc(0, 0, 1, 4);
	    gbc.fill = GridBagConstraints.BOTH;
	    gbl.setConstraints(bild, gbc);	 
	    startmenue.getContentPane().add(bild);
	    
	    JButton neu = new JButton("Neue Datei erstellen");
	    gbc = makegbc(1, 0, 1, 1);
	    gbc.fill = GridBagConstraints.HORIZONTAL;
	    gbl.setConstraints(neu, gbc);	
	    startmenue.getContentPane().add(neu);
		
	    JButton laden = new JButton("Datei laden");
	    gbc = makegbc(1, 1, 1, 1);
	    gbc.fill = GridBagConstraints.HORIZONTAL;
	    gbl.setConstraints(laden, gbc);	
	    startmenue.getContentPane().add(laden);
	    
	    JButton exit = new JButton("Beenden");
	    gbc = makegbc(1, 3, 1, 1);
	    gbc.fill = GridBagConstraints.NONE;
	    gbc.anchor = GridBagConstraints.SOUTHEAST;
	    gbl.setConstraints(exit, gbc);	
	    startmenue.getContentPane().add(exit);
	    
	    startmenue.show();
	}
	
	public static GridBagConstraints makegbc(int x, int y, int width, int height)
	{
	    GridBagConstraints gbc = new GridBagConstraints();
	    gbc.gridx = x;
	    gbc.gridy = y;
	    gbc.gridwidth = width;
	    gbc.gridheight = height;
	    gbc.insets = new Insets(1, 1, 1, 1);
	    return gbc;
	}
}
 
Hoi,

Code:
// java.awt importen!!! Für die Farbe!
import java.awt.*;
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Insets; 

import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JDialog; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 

public class rahmen { 

   public static void main(String[] args) { 
       
       JFrame startmenue = new JFrame("Start"); 
       final JDialog f = new JDialog(startmenue,"Start",true); 
       f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       startmenue.setSize(500,250);      
         
       GridBagLayout gbl = new GridBagLayout(); 
       GridBagConstraints gbc; 
       startmenue.getContentPane().setLayout(gbl);  
       
       // Hier die Farbe und bitte die zweite Zeile auch, wenn Du keinen
       // Window-Closing-Adapter benutzt. Sonst läuft das Programm weiter
       // wenn Du das Fenster wegklickst und nimmt Speicher
       startmenue.getContentPane().setBackground(Color.BLUE);
       startmenue.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
       JLabel bild = new JLabel(new ImageIcon("logo.jpg"));    
       gbc = makegbc(0, 0, 1, 4); 
       gbc.fill = GridBagConstraints.BOTH; 
       gbl.setConstraints(bild, gbc);    
       startmenue.getContentPane().add(bild); 
       
       JButton neu = new JButton("Neue Datei erstellen"); 
       gbc = makegbc(1, 0, 1, 1); 
       gbc.fill = GridBagConstraints.HORIZONTAL; 
       gbl.setConstraints(neu, gbc);    
       startmenue.getContentPane().add(neu); 
       
       JButton laden = new JButton("Datei laden"); 
       gbc = makegbc(1, 1, 1, 1); 
       gbc.fill = GridBagConstraints.HORIZONTAL; 
       gbl.setConstraints(laden, gbc);    
       startmenue.getContentPane().add(laden); 
       
       JButton exit = new JButton("Beenden"); 
       gbc = makegbc(1, 3, 1, 1); 
       gbc.fill = GridBagConstraints.NONE; 
       gbc.anchor = GridBagConstraints.SOUTHEAST; 
       gbl.setConstraints(exit, gbc);    
       startmenue.getContentPane().add(exit); 
       
       startmenue.setVisible(true);
   } 
    
   public static GridBagConstraints makegbc(int x, int y, int width, int height) 
   { 
       GridBagConstraints gbc = new GridBagConstraints(); 
       gbc.gridx = x; 
       gbc.gridy = y; 
       gbc.gridwidth = width; 
       gbc.gridheight = height; 
       gbc.insets = new Insets(1, 1, 1, 1); 
       return gbc; 
   } 
}

Mit dem Skalieren kann ich Dir nicht helfen. Müsste ich erstmal nachlesen.

greetz
SLi
 
Danke für die Tipps! (hab bei der Color einstellung getContentPane vergessen :roll: )
Falls mir jetzt noch jemand bei den Fragen 1-3 helfen könnte, wäre das super!
 
Code:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Rahmen_2 extends JFrame implements ActionListener{
    public Rahmen_2() {
        super("Start");
        setSize(400,400);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        //JComponents
        buttonPanel = new JPanel();
        neu = new JButton("Neue Datei erstellen");
        laden = new JButton("Datei laden");
        exit = new JButton("Beenden");
        panel1 = new JPanel();
        panel2 = new JPanel();
        panel3 = new JPanel();
        panel4 = new JPanel();
        //buttonPanel
        buttonPanel.setLayout(new GridLayout(3, 1, 5, 5));
        buttonPanel.setBorder(BorderFactory.createTitledBorder("Bitte auswählen"));
        neu.setText("neu");
        neu.addActionListener(this);
        buttonPanel.add(neu);
        laden.setText("laden");
        laden.addActionListener(this);
        buttonPanel.add(laden);
        exit.setText("exit");
        exit.addActionListener(this);
        buttonPanel.add(exit);
        getContentPane().add(buttonPanel, BorderLayout.CENTER);
        //setBackground
        bgColor = new Color(0, 0, 255);
        panel1.setBackground(bgColor);
        panel1.setPreferredSize(new Dimension(10, 100));
        getContentPane().add(panel1, BorderLayout.NORTH);
        panel2.setBackground(bgColor);
        panel2.setPreferredSize(new Dimension(10, 100));
        getContentPane().add(panel2, BorderLayout.SOUTH);
        panel3.setBackground(bgColor);
        panel3.setPreferredSize(new Dimension(100, 10));
        getContentPane().add(panel3, BorderLayout.EAST);
        panel4.setBackground(bgColor);
        panel4.setPreferredSize(new Dimension(100, 10));
        getContentPane().add(panel4, BorderLayout.WEST);
    }
    public static void main(String args[]) { new Rahmen_2().setVisible(true);   }

    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == neu) System.out.println("neu");
        if(e.getSource() == laden) System.out.println("laden");
        if(e.getSource() == exit) dispose();
    }
    public JButton neu, laden, exit;
    public JPanel buttonPanel, panel1, panel2, panel3, panel4;
    public Color bgColor;
}
 
@Andre_Uhres:
Kannst Du mir sagen warum du die Konstante EXIT_ON_CLOSE über WindowConstants aufgerufen hast (kenne ich gar nicht).
Habs lange mit this.EXIT_ON_CLOSE aufgerufen, bis ich hier im Forum mal gelesen habe, dass man es Konstant aufrufen soll. Seither nehme ich JFrame.EXIT_ON_CLOSE.
Wär nett wenn Du mir erklärst warum 😉
 
JFrame, JInternalFrame, und JDialog benutzen die WindowConstants.
Es dürfte also ziemlich schnuppe sein ob man die Konstanten von WindowConstants
direkt nimmt oder über den Umweg von JFrame/JInternalFrame/JDialog.
Ich liebe halt den direkten Weg.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben