在运行时Java添加和移动组件

时间:2012-10-01 14:00:43

标签: java swing button label

我想在运行时添加,移动和设置组件的属性(字体和旋转)。

换句话说,我需要添加一个按钮,一个标签,使用鼠标拖动它们并在运行时设置组件的属性。是否有任何Java摇摆或类似的示例?

这是我的代码

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.awt.image.BufferedImageOp;
import java.io.File;
import java.sql.SQLException;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;






public class prova extends JFrame implements MouseMotionListener,MouseListener{




    //*************** INIZIALIZZAZIONE VARIABILI  ***************************  



Checkbox CB=new Checkbox("Label",true);
Button BP=new Button("BUTTON_1");
Button B=new Button("OK");
JComboBox combo1=new JComboBox();
JMenuBar menuBar;
int app=0;
static int anglePeso=0;
static int angleTara=0;
ImageIcon ic;
Border border = LineBorder.createBlackLineBorder();
static int pesoX=184;
static int pesoY=91;
static boolean taraVisible=false;
static boolean pesoVisible=false;
static boolean logo1Visible=false;
static boolean BarCodeVisible=false;  
static String font="";
static String rot="";
Label societa=new Label ("Società");
Label importo=new Label ("Importo");
Label nome=new Label("Nome Prodotto");
static int logo1X=250;
static int logo1Y=90;
static Component C;
static int label1X=183;
static int label1Y=91;
static int taraX=100; 
//TextField TF=new TextField(10);
static Panel P=new Panel();
//List TA=new List();
boolean b1=false;
int c1=0;int c2=0;
static JLabel logo2=new JLabel("Logo2");
  static int aa=0;


  static int importoX=0;
  static int importoY=0;


 public static boolean isBarCodeVisible() {
        return BarCodeVisible;
    }

    public static void setBarCodeVisible(boolean BarCodeVisible) {
        prova.BarCodeVisible = BarCodeVisible;
    }

    public static Component getC() {
        return C;
    }

    public static void setC(Component C) {
        prova.C = C;
    }




    public static int getAnglePeso() {
        return anglePeso;
    }

    public static void setAnglePeso(int anglePeso) {
        prova.anglePeso = anglePeso;
    }






 static ImageIcon immLogo1;

    public JLabel getBarcode() {
        return barcode;
    }

    public void setBarcode(JLabel barcode) {
        this.barcode = barcode;
    }

    public static ImageIcon getImmLogo1() {
        return immLogo1;
    }

    public static void setImmLogo1(ImageIcon immLogo1) {
        prova.immLogo1 = immLogo1;
    }





    public static void setFont(String font) {
        prova.font = font;
    }

    public static String getRot() {
        return rot;
    }

    public static void setRot(String rot) {
        prova.rot = rot;
    }

    public static boolean isPesoVisible() {
        return pesoVisible;
    }

    public static void setPesoVisible(boolean pesoVisible) {
        prova.pesoVisible = pesoVisible;
    }

    public static boolean isTaraVisible() {
        return taraVisible;
    }

    public static void setTaraVisible(boolean taraVisible) {
        prova.taraVisible = taraVisible;
    }



static JLabel label1=new JLabel("Peso"){



protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
AffineTransform aT = g2.getTransform();
Shape oldshape = g2.getClip();
double x = getWidth()/2.0;
double y = getHeight()/2.0;
aT.rotate(Math.toRadians(anglePeso), x, y);
// g2.transform(aT);
g2.setTransform(aT);
g2.setClip(oldshape);
super.paintComponent(g);
}
};
Label data=new Label("Data");
static JLabel tara=new JLabel("Tara"){

        protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
AffineTransform aT = g2.getTransform();
Shape oldshape = g2.getClip();
double x = getWidth()/2.0;
double y = getHeight()/2.0;
aT.rotate(Math.toRadians(angleTara), x, y);
// g2.transform(aT);
g2.setTransform(aT);
g2.setClip(oldshape);
super.paintComponent(g);
}
};
static JLabel logo1=new JLabel("Logo1");



    public static JLabel getTara() {
        return tara;
    }

    public static void setTara(JLabel tara) {
        prova.tara = tara;
    }
static JLabel barcode=new JLabel ("Bar Code");/*{



protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
AffineTransform aT = g2.getTransform();
Shape oldshape = g2.getClip();
double x = getWidth()/2.0;
double y = getHeight()/2.0;
aT.rotate(Math.toRadians(angle), x, y);
// g2.transform(aT);
g2.setTransform(aT);
g2.setClip(oldshape);
super.paintComponent(g);
}
};
*/



    public static JLabel getLogo1() {
        return logo1;
    }

    public static void setLogo1(JLabel logo1) {
        prova.logo1 = logo1;
    }

    public static boolean isLogo1Visible() {
        return logo1Visible;
    }

    public static void setLogo1Visible(boolean logo1Visible) {
        prova.logo1Visible = logo1Visible;
    }

    public static int getLogo1X() {
        return logo1X;
    }

    public static void setLogo1X(int logo1X) {
        prova.logo1X = logo1X;
    }

    public static int getLogo1Y() {
        return logo1Y;
    }

    public static void setLogo1Y(int logo1Y) {
        prova.logo1Y = logo1Y;
    }

    public static int getTaraX() {
        return taraX;
    }

    public static void setTaraX(int taraX) {
        prova.taraX = taraX;
    }

    public static int getTaraY() {
        return taraY;
    }

    public static void setTaraY(int taraY) {
        prova.taraY = taraY;
    }
static int taraY=90;

    public int getLabel1X() {
        return label1X;
    }

    public void setLabel1X(int label1X) {
        this.label1X = label1X;
    }

    public int getLabel1Y() {
        return label1Y;
    }

    public void setLabel1Y(int label1Y) {
        this.label1Y = label1Y;
    }


public prova(){



}


public prova(String titlu)
{
super(titlu);
}
void init(int b,int h, String [] par) throws ClassNotFoundException, SQLException
{
setLayout(null);

System.out.println("****************COORINATE PESO: "+label1X+" "+label1Y);

menuBar = new JMenuBar();
JMenuBar menubar = new JMenuBar();
  JMenu filemenu = new JMenu("File");
  filemenu.add(new JSeparator());
  JMenu editmenu = new JMenu("Edit");
  editmenu.add(new JSeparator());
  JMenuItem fileItem1 = new JMenuItem("New");
  JMenuItem fileItem2 = new JMenuItem("Open");
  JMenuItem fileItem3 = new JMenuItem("Close");
  fileItem3.add(new JSeparator());
  JMenuItem fileItem4 = new JMenuItem("Save");
  JMenuItem editItem1 = new JMenuItem("Cut");
  JMenuItem editItem2 = new JMenuItem("Copy");
  editItem2.add(new JSeparator());
  JMenuItem editItem3 = new JMenuItem("Paste");
  JMenuItem editItem4 = new JMenuItem("Insert");
  filemenu.add(fileItem1);
  filemenu.add(fileItem2);
  filemenu.add(fileItem3);
  filemenu.add(fileItem4);
  editmenu.add(editItem1);
  editmenu.add(editItem2);
  editmenu.add(editItem3);
  editmenu.add(editItem4);
  menubar.add(filemenu);
  menubar.add(editmenu);
  setJMenuBar(menubar);
  //setSize(400,400);
  //setVisible(true);

fileItem4.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                System.out.println("Cliccato Save ");
                 punti();
                setVisible(false);
            }
        });
InserimentoDB is=new InserimentoDB();



Image im=is.getImage("select immagine from etichette where id= 75");
ic=new ImageIcon(im);


P.setBackground(Color.red);


String[] mm=new String [4];

mm[0]="0";
mm[1]="90";
mm[2]="180";
mm[3]="270";


        combo1.setModel(new DefaultComboBoxModel(mm) {});

   combo1.addMouseMotionListener(this);
combo1.addMouseListener(this);  

combo1.setLocation(200,100);combo1.setSize(80,40);
//add(combo1);

        System.out.println("LabelX: "+label1X);
        System.out.println("LabelY: "+label1Y);

     // label1.getParent().repaint();



/*
l.addMouseMotionListener(this);
l.addMouseListener(this);

l1.addMouseMotionListener(this);
l1.addMouseListener(this);

l2.addMouseMotionListener(this);
l2.addMouseListener(this);

l3.addMouseMotionListener(this);
l3.addMouseListener(this);

*/
for (int i=0; i<par.length; i++){

    System.out.println("Parametri ricevuti "+par[i]);





}


//TA.addMouseMotionListener(this);
//TA.addMouseListener(this);
B.addMouseMotionListener(this);
B.addMouseListener(this);
P.addMouseMotionListener(this);
P.addMouseListener(this);
CB.addMouseMotionListener(this);
CB.addMouseListener(this);

if (par[6].equalsIgnoreCase("logo1")){

    if(logo1Visible){


        System.out.println("*******LOGO1: "+immLogo1);
       // logo1.setIcon(immLogo1);
    logo1.addMouseMotionListener(this);
    logo1.addMouseListener(this);

  //  System.out.println("Imm Logo1: "+immLogo1.getDescription());

    logo1.setIcon(ic);


    logo1.setLocation(logo1X,logo1Y);



    //label1.setLocation(pesoX,pesoY);
    logo1.setSize(384,160);
    add(logo1);

    }

}

if (par[0].equalsIgnoreCase("peso")){

    if(pesoVisible){

       // label1.setBorder(border);
    label1.addMouseMotionListener(this);
    label1.addMouseListener(this);

    label1.setBorder(BorderFactory.createEtchedBorder());

    //label1.setFont(font);

    label1.setLocation(label1X,label1Y);

    //label1.setLocation(pesoX,pesoY);
    label1.setSize(100,20);
   // label1.setIcon(immLogo1);
    add(getContent());
    //add(getCombo());

    label1.setName("peso");

    add(label1);
    repaint();

    }

}

if (par[1].equalsIgnoreCase("tara")){

    if(taraVisible){

    tara.addMouseMotionListener(this);
    tara.addMouseListener(this);
    //tara.setLocation(49,130);

     tara.setBorder(BorderFactory.createEtchedBorder());
    tara.setLocation(taraX,taraY);
    tara.setSize(100,20);
    tara.setName("tara");
    add(tara);
    repaint();
    }
}

if (par[2].equalsIgnoreCase("importo")){

    importo.addMouseMotionListener(this);
    importo.addMouseListener(this);
    importo.setLocation(44,91);importo.setSize(100,20);
    importo.setName("IMPORTO");

    add(importo);
}

if (par[3].equalsIgnoreCase("bar code")){

    if(BarCodeVisible){

    barcode.addMouseMotionListener(this);
    barcode.addMouseListener(this);


    ImageIcon icon =  new ImageIcon("/home/max/Downloads/ce.jpg");
    barcode.setIcon(icon);




    barcode.setLocation(81,223);barcode.setSize(284,177);

    add(barcode);
    }
}

if (par[4].equalsIgnoreCase("data")){

    data.addMouseMotionListener(this);
    data.addMouseListener(this);
   // data.setLocation(184,177);
    data.setSize(100,20);
    data.setName("data");
    add(data);
}

if (par[5].equalsIgnoreCase("nome prodotto")){

    nome.addMouseMotionListener(this);
    nome.addMouseListener(this);
    nome.setLocation(43,186);nome.setSize(100,20);

    add(nome);
}


ImageIcon icon1 =  new ImageIcon("/home/max/Downloads/ce.jpg");
    logo2.setIcon(icon1);
    logo2.setLocation(100, 50);
    add(logo2);

//add(B);***********************

B.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                //throw new UnsupportedOperationException("Not supported yet.");

                System.out.println("Cliccato");

                punti();
                setVisible(false);
            }
        });


/*data.addMouseMotionListener(this);
data.addMouseListener(this);

societa.addMouseMotionListener(this);
societa.addMouseListener(this);

barcode.addMouseMotionListener(this);
barcode.addMouseListener(this);

TA.setLocation(50,50);
TA.setSize(100,100);TA.add("List");

CB.setLocation(120,370);CB.setSize(100,20);

data.setLocation(184,177);data.setSize(100,20);
societa.setLocation(112,41);societa.setSize(100,20);

barcode.setLocation(44,178);barcode.setSize(100,20);*/

B.setLocation(100,150);B.setSize(80,40);

P.setLayout(new BorderLayout());
P.setLocation(100,200);P.setSize(150,150);
P.setBackground(Color.yellow);
P.add(BP,BorderLayout.NORTH);
//P.add(TF,BorderLayout.SOUTH);
//add(TA);add(B);add(P);add(CB);
//add(l);add(l1);add(l2);add(l3);add(label);

//add(label);
//add(data);add(societa);add(tara);add(barcode);

setLocation(500,500);
setSize(b*10,h*10);
setVisible(true);

//show();
}
//mouseDragged
public void mouseDragged(MouseEvent e)
{
Component C=e.getComponent();
if(b1==false){b1=true;Point p=new
Point(e.getPoint());c1=p.x;c2=p.y;}
Point z=new Point(e.getPoint());
Point q=new Point(C.getLocation());
C.setBounds(q.x+(z.x-c1),q.y+(z.y-c2),C.getSize().
width,C.getSize().height);
repaint();
}
//mouseReleased
public void mouseReleased(MouseEvent e)
{
b1=false;
System.out.println("Mouse Rilascaito");
Component C=e.getComponent();
System.out.println("*******++++++++++**********+++++++++Coordinate"+ C);
System.out.println("NOme: "+C.getName());

if(C.getName().equalsIgnoreCase("importo")){

    importo.setLocation(C.getX(), C.getY());

    importoX=C.getX();
    importoY=C.getY();

}

if(C.getName().equalsIgnoreCase("data")){

    data.setLocation(C.getX(), C.getY());

}


if(C.getName().equalsIgnoreCase("peso")){

    label1X=C.getX();
    label1Y=C.getY();

}
C.getX();
C.getY();

//Attenzione qui sotto da controllare!!!!!!!

//pesoX=e.getX();
//pesoY=e.getY();

repaint();
}
//mouseEntered
public void mouseEntered(MouseEvent e)
{
Cursor c1=new Cursor(Cursor.HAND_CURSOR);
setCursor(c1);
}
//mouseExited
public void mouseExited(MouseEvent e)
{
Cursor c2=new Cursor(Cursor.DEFAULT_CURSOR);
setCursor(c2);
}
//mouseClicked
public void mouseClicked(MouseEvent e)
{


    if (e.getClickCount() == 2) {
         Component C=e.getComponent();

         System.out.println("*****************+NOme componente: "+C.getName());


         System.out.println("Coordinate: "+C.getLocation());

         System.out.println("XXX: "+C.getX());
         System.out.println("YYY: "+C.getY());
       // Configurazione cc=new Configurazione();
       // cc.setComponente(C.getName());

       // cc.main();

         Configurazione cf=new Configurazione();

        // cf.setC(C);

         cf.main();



         //RotLabel rot=new RotLabel();

         //rot.main();

        System.out.println("\n\nRotazione: "+rot);
        System.out.println("Font: "+font);
        System.out.println("\n\n");


        System.out.println("+++++++++++++++++++++++++++++++Clicccato 2 volte");
    /* JFrame frame=new JFrame("Configurazione");
     frame.setSize(400, 400);
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
     frame.setLocation(200, 300);
     JLabel titolo=new JLabel("Configurazione "+C.getName());
     JLabel rotazione=new JLabel("Rotazione");
     String [] val=new String [4];
     val[0]="0";
     val[1]="90";
     val[2]="180";
     val[3]="270";
     JComboBox scelta=new JComboBox(val);
     frame.add(titolo);
     frame.add(rotazione);
     frame.add(scelta);



//3. Create components and put them in the frame.
//...create emptyLabel...
//frame.getContentPane().add(new JLabel("Configurazione"), BorderLayout.CENTER);

//4. Size the frame.
frame.pack();

//5. Show it.
frame.setVisible(true);*/

    }



Component C=e.getComponent();
C.getParent().repaint();
repaint();
System.out.println("Coordinate"+ C);

}
//mouseMoved
public void mouseMoved(MouseEvent e)
{
Component C=((Component)e.getSource());
java.util.Random r=new java.util.Random();
java.util.Random g=new java.util.Random();
java.util.Random b=new java.util.Random();
int cr=r.nextInt(255);int cg=g.nextInt(255);
int cb=b.nextInt(255);
Color col=new Color(cr,cg,cb);
//C.setBackground(col);


}
//mousePressed
public void mousePressed(MouseEvent e){}

public class mouse_events{}

public static  void punti(){

    Inizio in=new Inizio();


    System.out.println("\n\n****************Controllo visibilità: ");
    System.out.println("Peso: "+pesoVisible);
    System.out.println("Tara: "+taraVisible);
    System.out.println("Logo1: "+logo1Visible);

    System.out.println("***********************************\n\n");


    if(logo1Visible){

    System.out.println("Parametri Logo1 "+logo1.getLocation());
    System.out.println("Parametri  X Logo1 "+logo1.getX());

    in.setLogo1X(logo1.getX());

   //System.out.println("Scrivo app: "+app);
    System.out.println("Parametri Y Logo1 "+logo1.getY());
    in.setLogo1Y(logo1.getY());
    }



    if(pesoVisible){

    System.out.println("Parametri Label "+label1.getLocation());
    System.out.println("Parametri  X Label "+label1.getX());

    in.setLabelX(label1.getX());

   //System.out.println("Scrivo app: "+app);
    System.out.println("Parametri Y Label "+label1.getY());
    in.setLabelY(label1.getY());
    }

    if(taraVisible){

    System.out.println("Parametri tara "+tara.getLocation());
    System.out.println("Parametri  X Tara "+tara.getX());
    in.setTaraX(tara.getX());

   //System.out.println("Scrivo app: "+app);
    System.out.println("Parametri Y Tara "+tara.getY());
    in.setTaraY(tara.getY());

    }

    System.out.println("Parametri Bar Code "+barcode.getLocation());
    System.out.println("Parametri  X Bar code "+barcode.getX()/10);
    in.setBarX(barcode.getX()/10);

   //System.out.println("Scrivo app: "+app);
    System.out.println("Parametri Y Bar Code "+barcode.getY()/10);
    in.setBarY(barcode.getY()/10);


//    System.out.println("Parametri nome "+nome.getLocation());
//    System.out.println("Parametri  X nome "+nome.getX()/10);
//    in.setNomeX(nome.getX()/10);

   //System.out.println("Scrivo app: "+app);
//    System.out.println("Parametri Y nome "+nome.getY()/10);
//    in.setNomeY(nome.getY()/10);

//    System.out.println("Parametri importo "+importo.getLocation());
//    System.out.println("Parametri  X importo "+importo.getX()/10);
//    in.setImportoX(importo.getX()/10);

   //System.out.println("Scrivo app: "+app);
//    System.out.println("Parametri Y importo "+importo.getY()/10);
//    in.setImportoY(importo.getY()/10);


 //   System.out.println("Parametri data "+data.getLocation());
 //   System.out.println("Parametri  X data"+data.getX()/10);
 //   in.setDataX(data.getX()/10);

  //aa=data.getX();

   //System.out.println("Scrivo app: "+app);
 //   System.out.println("Parametri Y data "+data.getY()/10);
 //   in.setDataY(data.getY()/10);

}



public void visibile(boolean vis){

  P.setVisible(vis);
 /*   
WindowEvent close = new WindowEvent(FRAME, WindowEvent.WINDOW_CLOSING);
FRAME.dispatchEvent(close);
    */

}


/*
private JComboBox getCombo(){
//final JSlider slider = new JSlider(-180, 180, angle);

    String[] val=new String [4];
    val[0]="0";
    val[1]="90";
    val[2]="180";
    val[3]="270";
 //final JComboBox combo1=new JComboBox(val);   

combo1.addActionListener(new ActionListener() {


            @Override
            public void actionPerformed(ActionEvent e) {
             // angle = Integer.parseInt(combo1.getSelectedItem().toString());//.getValue();
                label1.getParent().repaint();
            }
        });
return combo1;
}*/

private JPanel getContent() {
label1.setFont(new Font("Monospaced", Font.PLAIN, 24));
label1.setBorder(BorderFactory.createEtchedBorder());
JPanel panel = new JPanel(new GridBagLayout());
panel.add(label1, new GridBagConstraints());
return panel;
}


 /*   
public static void main(String[] args)
{
prova t=new prova("MOUSE EVENT");
t.init();
}*/



public static void refresh(){


    //P.getParent().repaint();
    P.repaint();

    //add(label1);

    //repaint();
}



}

感谢。

1 个答案:

答案 0 :(得分:3)

多年前我为此写了一个框架。也许它可以作为一个开始(图书馆是开源):

教程:http://softsmithy.sourceforge.net/lib/current/docs/tutorial/swing/customizer/index.html

Javadoc:http://softsmithy.sourceforge.net/lib/current/docs/api/softsmithy-lib-core/index.html

主页:http://softsmithy.sourceforge.net/

的Maven:

<dependency>  
    <groupId>org.softsmithy.lib</groupId>  
    <artifactId>softsmithy-lib-core</artifactId>  
    <version>0.2</version>   
</dependency>  

更多信息:http://puces-blog.blogspot.ch/2012/07/news-from-software-smithy-version-02.html

其他解决方案:

您可以考虑使用NetBeans平台并尝试重用其Matisse组件或Visual Graph库。