所以,我试图在左侧和右侧分别创建按钮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
答案 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
keyword in a static method static
keyword do in a class? 编辑 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]);
}
}