Avatar billede langkiller Nybegynder
25. november 2012 - 20:25 Der er 8 kommentarer og
1 løsning

GUI spørgsmål i java

Kunne godt tænke mig at placerer en JLabel oven på et billede, hvordan gør man det?

Har følgende kode:
loginImage = new ImageIcon("greenslogo.png");
        logoLabel = new JLabel(loginImage);
       
        // Top Panelet
        JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.LEFT,0,0));
       
        topPanel.add(logoLabel);
        topPanel.add(new JLabel("HEJHEJ"));
        topPanel.add(new JLabel(""));
   
       
        frame.add(topPanel, BorderLayout.NORTH);


Hvordan kan jeg få JLabel med teksten HEJHEJ til at stå oven på topPanel? f.eks. med en absolut placering med flowlayout som jeg har gjort med panelet der indeholder billedet
Avatar billede arne_v Ekspert
25. november 2012 - 22:08 #1
Proev om du kan brug den her ide:

import java.awt.BorderLayout;
import java.awt.Font;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

public class ImageAndText extends JFrame {
    public ImageAndText() {
        setTitle("Image and text");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new BorderLayout());
        JLabel lbl = new JLabel();
        lbl.setIcon(new ImageIcon("/xxxx.jpg"));
        lbl.setText("Test");
        lbl.setHorizontalTextPosition(JLabel.CENTER);
        lbl.setVerticalTextPosition(JLabel.CENTER);
        lbl.setFont(new Font("Dialog", Font.PLAIN, 72));
        getContentPane().add(lbl);
        pack();
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame f = new ImageAndText();
                f.setVisible(true);
            }
        });
    }
}
Avatar billede langkiller Nybegynder
30. november 2012 - 21:34 #2
undskyld det sene svar, men knappen herinde på eksperten virkede ikke da jeg ville svare sidst. Prøvede flere steder fra.
Nå men fik det til at virke, så jeg siger mange tak for hjælpen !
Avatar billede langkiller Nybegynder
30. november 2012 - 21:47 #3
Har lige et andet spørgsmål som det kunne være fedt at få svar på.
Kan man fra en klasse (i et JPanel) ændre et andet JPanel som ligger i en anden klasse gennem en actionlistener på en JButton... Jeg har prøvet at extende min main GUI klasse, men hver gang jeg bare klikker på en knap der skal åbne en anden klasse (hovedmenu) og vise den i samme vindue åbner den samtidig et vindue med main GUI'en i et nyt vindue, har ingen ide om hvorfor den gør det... derudover ændre den slet ikke det ønskede jpanel når jeg endelig trykker på den JButton der skulle gøre dette.
er der ellers en anden måde aat ændre et jpanel i en anden klasse via en actionlistener ?

Håber ikke det lyder for kringlet.. prøvede at forklarer så godt jeg kunne.
Avatar billede arne_v Ekspert
01. december 2012 - 00:51 #4
Det kan du godt men du skal have en reference til det JPanel for at du kan aendre paa det.
Avatar billede langkiller Nybegynder
01. december 2012 - 16:05 #5
hvilken slags reference ? synes jeg har prøvet rigtig mange ting nu.. hmm kunne jeg sende JPanel som en parameter til den klasse der skal ændre det eller vil det bare skabe en ny variabel med et nyt panel i? pff bliver sgu nok aldrig rigtig gode venner med java swing gui
Avatar billede arne_v Ekspert
01. december 2012 - 16:40 #6
en reference ligesom man nu bruger i Java
Avatar billede arne_v Ekspert
01. december 2012 - 16:40 #7
eksempel:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class CrossPanel extends JFrame {
    public CrossPanel() {
        setTitle("Cross panel");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new BorderLayout());
        ColorPanel cp1 = new ColorPanel(1);
        ColorPanel cp2 = new ColorPanel(2);
        ColorPanel cp3 = new ColorPanel(3);
        ColorPanel cp4 = new ColorPanel(4);
        JPanel allfour = new JPanel();
        allfour.setLayout(new GridLayout(2,2));
        allfour.add(cp1);
        allfour.add(cp2);
        allfour.add(cp3);
        allfour.add(cp4);
        getContentPane().add(allfour, BorderLayout.CENTER);
        ChangePanel cp = new ChangePanel(cp1, cp2, cp3, cp4);
        getContentPane().add(cp, BorderLayout.SOUTH);
        pack();
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame f = new CrossPanel();
                f.setVisible(true);
            }
        });
    }
}

class ColorPanel extends JPanel {
    private static final Color[] cols = { Color.RED, Color.GREEN, Color.BLUE, Color.WHITE, Color.YELLOW, Color.BLACK };
    private int colix;
    public ColorPanel(int colix) {
        this.colix = colix;
        setPreferredSize(new Dimension(100, 100));
        changeColor();
    }
    public void changeColor() {
        setBackground(cols[colix]);
        colix = (colix + 1) % cols.length;
    }
}

class ChangePanel extends JPanel {
    private ColorPanel cp1;
    private ColorPanel cp2;
    private ColorPanel cp3;
    private ColorPanel cp4;
    public ChangePanel(ColorPanel cp1, ColorPanel cp2, ColorPanel cp3, ColorPanel cp4) {
        this.cp1 = cp1;
        this.cp2 = cp2;
        this.cp3 = cp3;
        this.cp4 = cp4;
        setLayout(new BorderLayout());
        JButton btn = new JButton("Change colors");
        btn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                ChangePanel.this.cp1.changeColor();
                ChangePanel.this.cp2.changeColor();
                ChangePanel.this.cp3.changeColor();
                ChangePanel.this.cp4.changeColor();
            }
        });
        add(btn, BorderLayout.CENTER);
    }
Avatar billede langkiller Nybegynder
02. december 2012 - 18:57 #8
takker endnu en gang for hjælpen . har fået svar på det jeg manglede :) du smider bare et svar
Avatar billede arne_v Ekspert
02. december 2012 - 21:44 #9
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester