图形用户界面

时间:2016-02-15 14:18:06

标签: java user-interface

所以,我试图在左侧和右侧分别创建按钮8。我对GUI很陌生。所以,我不知道如何改变颜色和形状,使这些按钮成为圆形并用红色和蓝色着色......这就是我到目前为止所拥有的......

import javax.swing.*;

import java.awt。*;

公共课安排{

// main must be static
public static void main(String[] args) {
    Arrangement arrangement = new Arrangement();
    arrangement.handle();
}

public void handle() {
    JFrame f= new JFrame();
    f.setVisible(true);
    f.setSize(600,400);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel p = new JPanel (new GridBagLayout());//in the constructor u specify the layout :)
    JPanel a = new JPanel (new GridBagLayout());


    JButton b1 = new JButton("Button 1");
    JButton b2 = new JButton("Button 2");
    JButton b3= new JButton ("Button 3");
    JButton b4= new JButton ("Button 4");
    JButton b5= new JButton ("Button 5");
    JButton b6= new JButton ("Button 6");
    JButton b7 = new JButton("Button 7");
    JButton b8 = new JButton("Button 8");
    JButton b9 = new JButton ("Button 9");
    JButton b10 = new JButton ("Button 10");
    JButton b11 = new JButton ("Button 11");
    JButton b12 =new JButton ("Button 12");
    JButton b13 = new JButton("Button 13");
    JButton b14= new JButton("Button 14");
    JButton b15= new JButton ("Button 15");
    JButton b16 = new JButton ("Button 16");

    GridBagConstraints c= new GridBagConstraints();
    GridBagConstraints d= new GridBagConstraints();

    c.insets = new Insets(5,5,5,5);//spacing

    c.gridx=0;
    c.gridy=1;
    p.add(b1,c);

    c.gridx=0;
    c.gridy=2;      
    p.add(b2,c);

    c.gridx=0;
    c.gridy=4;      
    p.add(b3,c);

    c.gridx=0;
    c.gridy=6;      
    p.add(b4,c);

    c.gridx=0;
    c.gridy=8;      
    p.add(b5,c);

    c.gridx=0;
    c.gridy=10;     
    p.add(b6,c);

    c.gridx=0;
    c.gridy=11;     
    p.add(b7,c);

    c.gridx=0;
    c.gridy=12;     
    p.add(b8,c);

    d.insets = new Insets(5,5,5,5);

    d.gridx=0;
    d.gridy=1;
    a.add(b9,d);

    d.gridx=0;
    d.gridy=2;
    a.add(b10,d);

    d.gridx=0;
    d.gridy=3;
    a.add(b11,d);

    d.gridx=0;
    d.gridy=4;
    a.add(b12,d);

    d.gridx=0;
    d.gridy=6;
    a.add(b13,d);

    d.gridx=0;
    d.gridy=8;
    a.add(b14,d);

    d.gridx=0;
    d.gridy=10;
    a.add(b15,d);

    d.gridx=0;
    d.gridy=12;
    a.add(b16,d);


    f.add(p, BorderLayout.WEST);
    f.add(a, BorderLayout.EAST);

}

} 现在这里的问题是我不能使用“this。”,使用static,如果我删除静态,我会收到一个错误,说我需要为我的代码包含静态工作... 有人可以帮我调试这个:'(并指导我如何让我的按钮成为理想的形状和颜色......!任何帮助都将非常感谢< 3

3 个答案:

答案 0 :(得分:2)

这对于评论来说太长了,但它与您使用static关键字有关:

您无法使用this关键字且必须static的原因是因为您的代码是在静态main方法中执行的。相反,将所有代码从main移至Arrangement类中的新方法,称其为handle()。然后在主类的开头创建一个Arrangement的实例,并调用handle()。例如:

public class Arrangement {

    // main must be static
    public static void main(String[] args) {
        Arrangement arrangement = new Arrangement();
        arrangement.handle();
    }

    public void handle() {
        /* Put the rest of your code here and 
         * you'll be able to use the 'this' keyword */
    }

}

可能有用的其他问题:

编辑 this question中描述了类似的任务。用户希望在屏幕上显示可点击的圆圈和方块。而不是使用JButton,他只是简单地在屏幕上绘制形状。

答案 1 :(得分:1)

使用可以使用按钮的自定义图标

jButton1.setIcon(new javax.swing.ImageIcon("C:\\Users\\admin\\Desktop\\image.jpg"));

如果要将颜色设置为按钮,请使用以下代码

    jButton1.setBackground(Color.BLUE);
    jButton1.setForeground(Color.GREEN);

希望我的代码在这方面帮助你。

答案 2 :(得分:1)

嗯,你的代码有三个问题。第一个问题已经讨论过了。您无法从静态上下文引用非静态变量。

  

这个词不是静态的,主要方法是静态的

现在,要更改背景颜色,请在要更改颜色的元素上调用 setBackground()方法。

最后,要制作按钮的形状,您可以点击此链接: Making buttons round

Bassically你在这里做的是扩展jbutton类。不允许它绘制自己的形状并使用图形绘制它。 您可以使用图形在每个Java GUI组件上绘制。您所要做的就是实现de paint componnent方法

顺便说一句,here是一种更清晰,更简单的图像显示方式。

最后一条评论,使调试更容易的关键是尝试编写干净且有组织的代码。 例如,我可以看到您一次又一次地重复以下代码:

$func()

你可以做的是创建一个包装它的功能

c.gridx=0;
c.gridy=1;
p.add(b1,c);

您也可以创建一个包含所有按钮的数组,因此您可以使用for循环来打包

void pack(Insets target, int xCoord,int yCoord,Component comp ){
target.gridx=xCoord;
target.gridy=yCoord;
p.add(comp, target);
}

左侧按钮包装:

JButton[] buttons= new JButton[8];

for(int j=0;j<16;j++){
    buttons[j]= new JButton("Button "+(j+1));
}

这是最终结果

for(int j=0;j<8;j++){
    pack(c, 0, j+1,buttons[j+1]);
}

}