新手求教

百曉生 2014-04-17 04:09:25






我的第一个图片是一个窗口,背景颜色不断变化,第二个图片是一个拥有5个按钮的窗口,我想把第一个的颜色变化弄到第二个图片的中间按钮位置,请问这涉及到哪方面知识,课本上关于这点的知识很少,而搜索又不知这涉及到哪些,那位有空指点一下,感激不尽
...全文
523 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
百曉生 2014-04-25
  • 打赏
  • 举报
回复
引用 14 楼 Inhibitory 的回复:
问题分两个来看 我的第一个图片是一个窗口,背景颜色不断变化 很典型的需要用线程不断的设置背景色,然后刷新显示。 第二个图片是一个拥有5个按钮的窗口,我想把第一个的颜色变化弄到第二个图片的中间按钮位置 自定义背景,需要 Override 按钮的 paintComponent 方法,用 Painter 绘制背景.
我的第一个的想法是窗口中间那块是ige按钮数组,哲学按钮背景色不同,然后循环的覆盖,以达到目的,不管怎么说,谢谢啊
百曉生 2014-04-25
  • 打赏
  • 举报
回复
引用 13 楼 lg1544650023 的回复:
楼主学到计时器和画图了吗,如果没有的话就学习一下我下面的代码吧。 我的思路是在center域中放一个JPanel,然后把按钮放到这个Panel中,并且把这个Panel设为空布局(这样才可以改变按钮的大小)。设置一个计时器,每隔400ms就改变一次按钮的背景颜色,并且调用repiant方法进行重画,就可以实现颜色的变化了。 具体代码如下:
package csdn;

import java.awt.*;
import java.awt.event.*;

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

public class Lian2 {
	public static void main(String[] args) {
		bianhua1 bh = new bianhua1();
	}
}

class bianhua1 extends JPanel {
	Frame f = new Frame("布局");
	JFrame jf = new JFrame();// 创建面板
	JPanel jp = new JPanel();// 创建容器

	Button b1 = new Button("North");
	Button b2 = new Button("South");
	Button b3 = new Button("West");
	Button b4 = new Button("East");
	Button b5 = new Button("Center");
	// 把中间的按钮放到新的JPanel中
	JPanel centerPanel = new JPanel();
	private Color[] color = { Color.green, Color.blue, Color.red, Color.pink,
			Color.yellow, Color.black, Color.white };
	public static int i = 0;

	bianhua1() {

		// ///////////////////////////////////////////////////////////////

		centerPanel.setSize(200, 200);
		centerPanel.setBackground(Color.gray);

		// 这个Panel设为空布局,以便改变按钮的大小
		centerPanel.setLayout(null);
		b5.setSize(205, 220);
		b5.setLocation(0, 0);
		centerPanel.add(b5);
		b5.setBackground(Color.green);
		ActionListener listener = new Timeprinter();
		Timer t = new Timer(400, listener);
		t.start();
		f.pack();

		f.setLayout(new BorderLayout());
		f.add(b1, BorderLayout.NORTH);
		f.add(b2, BorderLayout.SOUTH);
		f.add(b3, BorderLayout.WEST);
		f.add(b4, BorderLayout.EAST);
		f.add(centerPanel, BorderLayout.CENTER);
		f.setSize(300, 300);
		f.setVisible(true);
		f.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
	}

	class Timeprinter implements ActionListener {
		public void actionPerformed(ActionEvent event) {
			b5.setBackground(color[(++i) % 7]);
			centerPanel.repaint();
		}
	}
}
这正是我想要的结果,我会好好看看你的代码的,谢谢啊
百曉生 2014-04-25
  • 打赏
  • 举报
回复
引用 12 楼 u014764696 的回复:
首先这里有两个窗体,即要有两个继承了的JFrame类,创建他们的对象。在第二个图片的那个类的对象的按钮的监听事件处理方法中写关键代码。setBacground()方法。但是该方法的调用者为"第一个图片的类的对象.按钮.setBackground()"。把第一个对象作为参数传递给第二个类的构造方法,这样在事件处理方法中就可以引用了。最后在主方法中创建两个类的对象就行了,注意第二个类new时必需传递第一个类的对象
我是初学者,刚看到图形界面编程这里,许多东西都不知道,谢谢指点了
Inhibitory 2014-04-25
  • 打赏
  • 举报
回复
问题分两个来看 我的第一个图片是一个窗口,背景颜色不断变化 很典型的需要用线程不断的设置背景色,然后刷新显示。 第二个图片是一个拥有5个按钮的窗口,我想把第一个的颜色变化弄到第二个图片的中间按钮位置 自定义背景,需要 Override 按钮的 paintComponent 方法,用 Painter 绘制背景.
sleeplacker 2014-04-25
  • 打赏
  • 举报
回复
楼主学到计时器和画图了吗,如果没有的话就学习一下我下面的代码吧。 我的思路是在center域中放一个JPanel,然后把按钮放到这个Panel中,并且把这个Panel设为空布局(这样才可以改变按钮的大小)。设置一个计时器,每隔400ms就改变一次按钮的背景颜色,并且调用repiant方法进行重画,就可以实现颜色的变化了。 具体代码如下:
package csdn;

import java.awt.*;
import java.awt.event.*;

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

public class Lian2 {
	public static void main(String[] args) {
		bianhua1 bh = new bianhua1();
	}
}

class bianhua1 extends JPanel {
	Frame f = new Frame("布局");
	JFrame jf = new JFrame();// 创建面板
	JPanel jp = new JPanel();// 创建容器

	Button b1 = new Button("North");
	Button b2 = new Button("South");
	Button b3 = new Button("West");
	Button b4 = new Button("East");
	Button b5 = new Button("Center");
	// 把中间的按钮放到新的JPanel中
	JPanel centerPanel = new JPanel();
	private Color[] color = { Color.green, Color.blue, Color.red, Color.pink,
			Color.yellow, Color.black, Color.white };
	public static int i = 0;

	bianhua1() {

		// ///////////////////////////////////////////////////////////////

		centerPanel.setSize(200, 200);
		centerPanel.setBackground(Color.gray);

		// 这个Panel设为空布局,以便改变按钮的大小
		centerPanel.setLayout(null);
		b5.setSize(205, 220);
		b5.setLocation(0, 0);
		centerPanel.add(b5);
		b5.setBackground(Color.green);
		ActionListener listener = new Timeprinter();
		Timer t = new Timer(400, listener);
		t.start();
		f.pack();

		f.setLayout(new BorderLayout());
		f.add(b1, BorderLayout.NORTH);
		f.add(b2, BorderLayout.SOUTH);
		f.add(b3, BorderLayout.WEST);
		f.add(b4, BorderLayout.EAST);
		f.add(centerPanel, BorderLayout.CENTER);
		f.setSize(300, 300);
		f.setVisible(true);
		f.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
	}

	class Timeprinter implements ActionListener {
		public void actionPerformed(ActionEvent event) {
			b5.setBackground(color[(++i) % 7]);
			centerPanel.repaint();
		}
	}
}
  • 打赏
  • 举报
回复
首先这里有两个窗体,即要有两个继承了的JFrame类,创建他们的对象。在第二个图片的那个类的对象的按钮的监听事件处理方法中写关键代码。setBacground()方法。但是该方法的调用者为"第一个图片的类的对象.按钮.setBackground()"。把第一个对象作为参数传递给第二个类的构造方法,这样在事件处理方法中就可以引用了。最后在主方法中创建两个类的对象就行了,注意第二个类new时必需传递第一个类的对象
百曉生 2014-04-24
  • 打赏
  • 举报
回复
package _TianXia;

import java.awt.*;
import java.awt.event.*;

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

public class Lian2 {
public static void main(String[] args) {
bianhua1 bh = new bianhua1();
}
}

class bianhua1 {
Frame f = new Frame("布局");

bianhua1() {
JFrame jf = new JFrame();// 创建面板
JPanel jp = new JPanel();// 创建容器

Button b1 = new Button("North");
Button b2 = new Button("South");
Button b3 = new Button("West");
Button b4 = new Button("East");
// ///////////////////////////////////////////////////////////////
CardLayout c1 = new CardLayout();
f.setLayout(c1);
// b[0].setBounds(5,5,5,5);
JButton b[] = new JButton[7];
for (int i = 0; i < 7; i++) {
b[i] = new JButton("Page: " + (i + 1));

f.add(b[i], "Page" + (i + 1));
// f.add(b[i],BorderLayout.CENTER);
}

b[0].setBackground(Color.green);
b[1].setBackground(Color.blue);
b[2].setBackground(Color.red);
b[3].setBackground(Color.pink);
b[4].setBackground(Color.yellow);
b[5].setBackground(Color.black);
b[6].setBackground(Color.white);
f.pack();

f.setLayout(new BorderLayout());
f.add(b1, BorderLayout.NORTH);
// b1.setBackground(Color.red);
f.add(b2, BorderLayout.SOUTH);
f.add(b3, BorderLayout.WEST);
f.add(b4, BorderLayout.EAST);

f.setSize(300, 300);
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});

while (true) {
try {
Thread.sleep(500);
} catch (Exception e) {
}
c1.next(f);
}
}
}

这是这个代码的结果——
请问为什么这个绿色按钮所在区域没有自动的改变颜色?
有怎样控制按钮数组的大小和位置呢?求教
百曉生 2014-04-18
  • 打赏
  • 举报
回复
引用 9 楼 lin9118 的回复:
现在用JAVA做界面的好像不多了吧?似乎都转向web端了
嗯,现在javaweb的确是挺火的,不过我们现在是开了java课,刚开始学没多久
Gaken 2014-04-18
  • 打赏
  • 举报
回复
现在用JAVA做界面的好像不多了吧?似乎都转向web端了
百曉生 2014-04-18
  • 打赏
  • 举报
回复
引用 7 楼 kkkksunday 的回复:
你弄个东西把按钮装起来不就是了吗?
java方面的新手,初学者,许多东西都还不太清楚,好吧!我多看看书,看看怎么装吧
啊呀 2014-04-18
  • 打赏
  • 举报
回复
你弄个东西把按钮装起来不就是了吗?
百曉生 2014-04-17
  • 打赏
  • 举报
回复
怎么没人回复了啊?难道这儿的java版块人这么少吗?唉,自己顶一下吧! 现在虽然有些进展,但还是挺麻烦的,还没弄成功,哪位有空再帮帮忙吧(提供一些思路网址什么的都行啊)
百曉生 2014-04-17
  • 打赏
  • 举报
回复
引用 4 楼 u012724379 的回复:
我刚才看了看,你或许可以用一个JPanel,把JPanel放到那个Center上,然后将这个变化的放到那个JPanel中; 你可以先试试;
嗯,那我试试
-江沐风- 2014-04-17
  • 打赏
  • 举报
回复
我刚才看了看,你或许可以用一个JPanel,把JPanel放到那个Center上,然后将这个变化的放到那个JPanel中; 你可以先试试;
百曉生 2014-04-17
  • 打赏
  • 举报
回复
错了,二楼最后是想把这个变化放到第二个程序窗口的中间那个按钮
百曉生 2014-04-17
  • 打赏
  • 举报
回复
引用 1 楼 taxuelingbing 的回复:
这个我也不是很明白 这个可以加背景颜色,至于你说的颜色变化,不知道怎么搞 setBackground();加这句就好了 JButton jbutton=new JButton(); jbutton.setBackground(Color.blue);
你好,我的那个所谓的颜色变化其实就是按钮数组,具体你可以看看下面的代码
package com.jacket;

import java.awt.*;
import java.awt.event.*;

public class LX
{
	public static void main(String args[])
	{
		Frame f=new Frame("布局");
		
		CardLayout c1=new CardLayout();
		f.setLayout(c1);

		
		
		Button b[]=new Button[7];
		/*
		for(int i=0;i<7;i++)
		{
			b[i]=new Button();
			f.setLayout(new BorderLayout());
			f.add(new Button("North"),BorderLayout.NORTH);
			f.add(new Button("South"),BorderLayout.SOUTH);
			f.add(new Button("West"),BorderLayout.WEST);
			f.add(new Button("East"),BorderLayout.EAST);
			f.add(new Button("Center"),BorderLayout.CENTER);
		
			f.add(b[i],BorderLayout.CENTER);
		}
		*/
		for(int i=0;i<7;i++)
		{
			b[i]=new Button("Page: "+(i+1));
			
			f.add(b[i],"Page"+(i+1));
		}
		b[0].setBackground(Color.green);
		b[1].setBackground(Color.blue);
		b[2].setBackground(Color.red);
		b[3].setBackground(Color.pink);
		b[4].setBackground(Color.yellow);
		b[5].setBackground(Color.black);
		b[6].setBackground(Color.white);
		f.pack();
		
		f.setSize(300,300);
		f.setVisible(true);
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
		
		while(true)
		{
			try
			{
				Thread.sleep(500);  
			}catch(Exception e){ }
			c1.next(f);
		}
	}
}
我想的是怎么把这个变化放到第一个程序窗口的中间那个按钮上
机器学习之禅 2014-04-17
  • 打赏
  • 举报
回复
这个我也不是很明白 这个可以加背景颜色,至于你说的颜色变化,不知道怎么搞 setBackground();加这句就好了 JButton jbutton=new JButton(); jbutton.setBackground(Color.blue);

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧